最近老师给了一个自动接听电话的项目,上网搜索所谓“自动接听电话”无一例外是调用了ITelephony接口中的answerRingingCall()方法。不得不说这个方法确实方便,如果忽略它需要MODIFY_PHONE_STATE权限的话,而后者在Android 2.3版本以后已经只能由系统应用拥有。
那我们怎么获得这个权限呢?继续查,发现还是千篇一律地复制粘贴同一篇博客:说第一种方法是到系统框架下mm编译,第二种是获得目标系统的数字签名并覆盖到自己的apk。总而言之,就是各种方法把自己伪装成系统应用。
然而这种方式具有局限性,即只能适应一种系统。而且,现在的手机大多是各个厂商包装后的系统,我这样的小白根本无法获得他们的数字签名(有知道怎么解决的请务必私信我)。
几番接近放弃,最后学长一句话“不行就模拟触屏把电话接了!”
一想也对,模拟触屏虽然也是要获得各种坐标什么的,但好歹还能解决问题啊,然后就开始学如何模拟触屏,发现安卓自带的模拟触屏功能无法满足,而使用Instrumentation接口就又陷入了获得系统签名的窘境,到处搜各种方法,最后找到了合适的解决方案:使用Shell调用ADB指令实现模拟触屏。
用这个方案测试了几次,突然发现有模拟按键我还模拟什么触屏,直接用接听键和挂断键啊!
太晚了要睡了,具体的方法教程过几天再写。