失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > android实现拨打电话但不弹出拨号界面

android实现拨打电话但不弹出拨号界面

时间:2020-04-24 14:10:45

相关推荐

android实现拨打电话但不弹出拨号界面

这里只提供一个大概的思路,整个流程不是我一个人就能完成的。测试机型为htc one x,Android版本4.2.2,已ROOT。

要实现拨号程序可能很简单,一个简单的Intent就能实现,从发出意图到真正实现拨号的代码中间还执行了很多其他方法,这都是android底层源码自动实现的,其中就包含了启动拨号的Activity。要想实现不弹出拨号界面就实现拨号,就必须绕过中间这些方法,直接调用framework层中的拨号方法。详情可以去看下别人写的android拨号流程,就可知道真正实现拨号的方法。

这里先贴出我写的代码:

public static void Call(String number, Context context) {PhoneFactory.makeDefaultPhones(context);Phone p = PhoneFactory.getDefaultPhone();CallManager cm = CallManager.getInstance();cm.registerPhone(p);Phone phone = cm.getDefaultPhone();try {phone.dial(number);} catch (CallStateException e) {e.printStackTrace();}}

一开始是想通过反射调用底层方法,但是我当初试过,好像不能实现,所以最后直接调用底层方法,由于android本身并未提供相关的类或方法,所以必须引用额外的jar包(将android源码编译打包成jar)。这里我用的是某位大神将android2.2的部分源码编译成的jar包。

然后是权限申明:

<uses-permission android:name="android.permission.READ_PHONE_STATE"/><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

但是这样还不是不够,要想调用底层的方法权限依然不够,在application中加上

android:process="com.android.phone"

在manifest中加上

android:sharedUserId="android.uid.phone"

最后,也是最重要的地方,这个程序必须伪装成系统应用才能被正确安装到手机上,这一环节是别人实现的,我并不太清楚如何操作的。

最后附上成品效果图(由于没插卡,所以无法拨号,正常情况下是只有任务栏有拨号标志,但没有拨号界面弹出,另外拨号对象的响应时间也是无法控制的):

如果觉得《android实现拨打电话但不弹出拨号界面》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。