Android手机安全软件之设置电话拦截返回音浅析

Android手机安全软件之设置电话拦截返回音浅析

相信很多Android手机用户都用过手机安全软件的“电话拦截”功能,不管您用的是360安全卫士、腾讯手机管家,还是金山毒霸…,它们的共同特点就是您在设置来电拦截黑名单或开启/关闭来电等待时,界面并不友好(如下图所示),比如:会有拨号界面弹出再消失,或者手机会拨打一个号码,需要用户手动挂断或直到连接自动挂断。

Android手机安全软件之设置电话拦截返回音浅析

二、改进和优化
我们从系统入手,彻底解决这个不友好的界面。完整的拨号流程会从app层->framework层,拨号界面的出现是在app层,因此我们避开拨号流程中app层的流程,通过我们自己的service直接调用framework层的拨号方法,从而避免了拨号界面的出现,消除了不好的用户体验。
i) 在init.rc中添加一个service(上图左边Service绿色方框所示),并授予它root权限。该service起来之后,等待client端的请求。并对client端暴露了一套SDK API接口(上图左边SDK API绿色方框所示),app应用通过调用这套API接口,设置、查询来电拦截返回音。我们提供的SDK 接口有:
public boolean setReturnCause(int reason, int simId);//设置来电拦截返回音
public String getCallForwardSetting(int reason, int simId);//查询呼叫转移号码(即返回音)
public boolean setCallWait(int status, int simId);//设置开启/关闭呼叫等待
ii) 在PhoneInterfaceManager中新增一个方法setReturnCause()(如上图左边绿色部分所示),当用户设置来电拦截返回音或呼叫等待时,返回音类型或呼叫等待待设类型会传递给telephony service,并通过PhoneInterfaceManager中的方法setReturnCause()(来电拦截和呼叫等待原理相同,因此走的同一套流程)去直接调用framework层的dial()方法,从而避免弹出InCallScreen。
从以上的分析可看出,针对设置来电返回音和开启/关闭呼叫等待功能会弹出拨号界面这一问题,第三方应用,不管它有没有root权限,都无法避免拨号界面的出现。而我们从系统入手,将拨号流程“拦腰”截断,从底层“静默”进行拨号流程,避免了上层的拨号界面的弹出。

三、存在问题
1、由于在“通话设置”->“来电转接”->“占线时转接”中可查询并修改返回音的状态,因此,对返回音设置途径并不唯一。用户可手动进入通话设置中设置,也可通过其他手机安全软件设置,又或者通过我们提供的API设置。这会就造成来电拦截返回音以最后一次设置为准(不管是通过哪种途径设置)。
2、正常拒接电话操作(比如有电话打入,此时用户直接挂断电话),android系统中默认的是用户忙(所以您打电话出去,接收者挂断您的电话,您会听到“您拨打的用户忙”)。而由于忙时转接已被设置,所以正常的来电被挂断就会走忙时转接流程,因此返回音也会相应的改成用户已经设置的返回音了。所以也许有的用户有过这样的经历:您拨打电话给某人,电话通了之后,返回“您拨打的用户已停机”等,可能是由于他设置了来电拦截黑名单时选择的返回音是“已关机”,从而修改了忙时转接的号码。

来源:xuewater

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2013年10月2日
下一篇 2013年10月3日

相关推荐