android 拨打电话但隐藏,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包。

然后是权限申明:

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

android:process="com.android.phone"在manifest中加上

android:sharedUserId="android.uid.phone"

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

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

0818b9ca8b590ca3270a3433284dd417.png

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值