android平台双卡适配

来源:互联网 发布:淘宝 一元起拍入口 编辑:程序博客网 时间:2024/06/15 22:33

市面上很多双卡机型,所以应用中如果有于sim卡有关的功能都需要适配。

android源码里只支持单卡,双卡是各个厂商在源码基础上扩展的。所以要适配,只好针对不同厂商的不同机型逐一进行。


适配基本步骤:

拿到一台双卡手机后,连上adb shell 查看一下注册的服务:

service list

在服务列表里找到phone 和sms相关的服务。phone、phone2、isms、isms2之类。

有的双卡只有一个phone,有的会有两个。不管几个,先写个测试代码,获得他们的服务实例。

以电话适配为例,先获得电话服务中的一个:

Object mTelephonyManager = mContext.getSystemService("phone2");

获得实例后,利用反射,查看实例的类名和所有public方法:

if(mTelephonyManager !=null){Method[] ms = mTelephonyManager.getClass().getMethods();Loge(mTelephonyManager.getClass().getCanonicalName());for(Method m:ms){Loge(m.getName()+" "+m.toGenericString()+" "+m.isAccessible());}}
可能也需要查看getDeclaredMethods()的结果。

在所有方法里查找要用的方法,比如注册监听用的listen(),操作电话的endcall()等等。

然后,利用反射,调用相关的方法,查看功能是否正常。


    因为是对android源码的扩展,所以基本方法名应该不会有太大改变,只是类名和参数会有不同,所以操作上,除了要利用反射来调用相应接口以外,其他都与android单卡平台的操作方法类似。

    因为短信的接收是利用广播intent来处理的,所以在截获短信的intent后,将intent的extra值都打出来分析一下,很容易就得到和双卡有关的信息,从而适配双卡收信。发短信就需要利用服务和接口反射了。

    业务部分适配好后,还需要看一下数据库的信息,数据库中可能存有卡槽id等信息,获取完整的数据库信息(短信或者通话日志),分析列名和值,就可以知道于双卡有关的列名,然后针对特殊列名进行适配。


原创粉丝点击