Android双卡识别IMSI以及副卡发送短信总结
有消息称,许多乐视员工的建行龙卡信用卡额度都被调整为1元,建设银行官方给出的理由为“涉及经济案件”。甚至3年前曾服务于乐视的员工,其建行信用卡额度也被调成了1元,这位前乐视员工投诉后建行回应:“该卡留的资料是在乐视,也是为了规避风险。”
作者简介本篇是 Trilen 的第二篇投稿,分享了双卡下识别IMSI以及发短信的技术,希望对大家有所帮助。
Trilen 的博客地址:
正文http://blog.****.net/u010019468
Android5.0 系统才开始提供对双卡识别支持,提供 SubscriptionManager类 来完成对双卡相关设备信息的读取。在 5.0之前 只能根据机型来适配来获取副卡Imsi,本文重点介绍 5.0之后 的Api以及适配。
SubscriptionManager相关Api介绍
这个类按官方解释就是提供电话 Subscription 相关信息,包括监听,查询 Subscription 总数,**的总数以及相关详情,常用Api如下(本文源码为API22):
List<SubscriptionInfo> getAllSubscriptionInfoList()
该接口返回全部的 SubscriptionInfo 信息
List<SubscriptionInfo> getActiveSubscriptionInfoList()
该接口返回当前处于**状态下的 SubscriptionInfo 信息,该类包含几个重点信息如下:
1、mSimSlotIndex:卡槽序号,从0开始,最大为1;即实际中 slot=0 表示 卡1,slot=1 表示 卡2;
查看源码 getSimCount() 实现:发现总数要么是1要是2,2即双卡了。
2、mId:即 subId,是唯一的,和 sim卡 Subscription 的身份识别。这个后面发现获取相关信息都是通过传 subId 来对应获取相关卡内容。也可以通过 slotId 来直接获取 subId
public static int[] getSubId(int slotId);
两者对应关系存在,根据 subId 也可以获取 slotId,phoneId
public static int getSlotId(int subId)
public static int getPhoneId(int subId)
也可以指定 subId、slotId 返回 SubscriptionInfo
根据对应subId获取SubscriberId(imsi)
Android5.0之后 就开始出现根据 subId 来获取对应 Imsi号,不够没有暴露(hide)接口。暴露的是获取默认的 卡1(slotId=0)的 Ismi
可见 5.0 新增了获取默认 subId 的方法 getDefaultSubscription(),统一都通过 subid 来获取imsi,5.0之前 代码如下:
可以看到 5.0之前 都是直接获取 SubscriberId 不区分 subId 即不分双卡,直接获取 卡1。但我们通过反射方式来获取 卡2 的 Imsi,传对应的 subId 即可:
我们还可以通过 subId 来获取更多关于卡2的相关信息:iccid、SimOperator、NetworkOperator
实现副卡发送短信
Android5.0之前 发送短信代码:
5.0之前 代码如下:
在 5.0之后 的实现会发现
对比 sInstance 初始化的实现发现 SmsManager 在 5.0之后 增加了通过 subid 构造 SmsManager
private SmsManager(int subId) {
mSubId = subId;
}
并暴露了通过 subid 来获取 SmsManager对象
所以副卡发送短信,只要获取对应的 SmsManager 即可,其他发送短信接口不变
适配
其实双卡国内手机厂商早就有定制实现双卡,Android系统到5.0才提供识别支持,各大厂商却不统一Api,国内的双卡功能是由厂商联合芯片开发商定做的,所以芯片商不一样,厂商不一样,实现方案也就不一样,所以api也不一样,也是隐藏Api,所以必须反射的不同的类和函数名。总的来说,目前全球有高通(小米),联发科(魅族),麒麟海思(华为),猎户座(三星)四家移动通讯芯片制造商。所以要在低版本的手机上适配
必须一一适配不同手机。可以参考下这篇文章:
更多http://blog.****.net/ymcl_hx/article/details/53484797
每天学习累了,看些搞笑的段子放松一下吧。关注最具娱乐精神的公众号,每天都有好心情。
如果你有好的技术文章想和大家分享,欢迎向我的公众号投稿,投稿具体细节请在公众号主页点击“投稿”菜单查看。
欢迎长按下图 -> 识别图中二维码或者扫一扫关注我的公众号: