注:本篇只讲双卡的发展原理,以及解决方法,不提供代码。想要代码的可以略过。
以下用到的名词解释
IMEI:国际移动设备身份码
IMSI:SIM卡的身份码,一张卡只有一个IMSI。
芯片厂商:MTK,Qualcomm,展讯等。
手机厂商:三星,华为,乐视,小米等。
一、双卡由来以及厂商的解决方案
在中国,聪明的中国人早双卡历史悠久,我记得在以前非智能机时代就实现了。犹记得以前广告
一个机子两张卡,打电话一张卡,发短信一张卡。
家里一张卡,工作一张卡,家庭工作两不误。
老婆一张卡,小三一张卡,老婆小三两不误。
so,延续古老的传统,以及这种较好的模式,智能手机理应继承这个优良传统。
但是,在美国,因为运营商绑定销售。所以基本只有一张卡,没这个需求啊。5.0之前没有双卡的API通用接口,各个厂商都有自己的实现方法,导致现在的群魔乱舞。标准不一。方法不一。手机厂商买芯片的时候有可能把双卡解决方案一并购买,也有可能自己实现。
获取双卡信息的方法主要手段是通过反射实现,需要具体的方法全名,难点在于如何知道双卡管理的包名以及类名以及调用的方法。
二、双卡ROM上的原理
底层的不太懂,大家可以找相关文章,不过在ROM层面上,厂商实现双卡管理,主要两种方法:
第一种:在原有的单卡管理类上额外添加双卡信息获取的方法,直接反射全部方法,然后一一查找即可。
第二种,新建一个单独的双卡管理器的包,需要反射全部找到双卡管理的实例,再反射全局,再查找,或者直接反编译。
如果获取了手机的芯片厂商,并且使用 是该厂商提供的方案,理论上可以获取使用该厂商通用双卡解决方案去获取。
如果手机厂商自己实现双卡管理,如三星。则需要寻找特定的双卡管理包来获取。
以上为基本原理跟大方向
三、实现双卡需要考虑的点
1、芯片的获取问题,一个厂商会生成多种芯片,需要根据获取到的芯片型号来判断厂商。
2、手机获取的手机基础信息,并不会告诉你是什么芯片,这个资料有可能会被修改,如乐视会把那个值改为lete,而不显示MTK。
3、不同芯片,需要获取不同芯片的通用方法,一个手机厂商有可能采购多种芯片。
4、ROM的获取问题,ROM的发布信息并不会直接告诉你是哪个厂商的ROM。
5、ROM和安卓SDK版本之间的差异会造成获取方法的不同。
6、如果使用反射跟反编译系统ROM的方法,需要大量时间。并且,这个结果有可能仅仅只对被反编译的机型跟特定的ROM有用。
7、需要提供市场上常见的双卡手机,得出的结果也只能保证经过测试的手机,并且手机刚好使用同一版本ROM才能保证获取。
8、如果手机刷了第三方ROM,也会造成上诉方法失效。
总之,碎片化的严重,造成并没有一个统一的方法去完美获取。需要花时间在适配上
网友评论