关于android双卡手机sim卡信息采集适配的心得

这几天通过对各个厂商的双卡信息适配的研究,总结了几点规律,写这篇心得主要是为了能够抛砖引玉,和大家一起分享,一起讨论,源码已上传。

一、android5.0以上(包含5.0)的版本双卡信息适配:
1、参数名意义:
slotId(simId):卡曹值Id,对应物理卡槽的位置0表示主卡位,1表示副卡位,-1表示无卡;
subId:据说是对应存放双卡信息数据库中的索引id,这个id目前只能从android5.0开始才能获取的到,获取需要用到的方法为
SubscriptionManager.getSubId(int slotId),注意的是这个方法返回的是一个long(5.0)/int类型数组,取数组第一个;(获取某些特定的信息需要用到subid,但大部分情况都是用slotId)

2、信息获取

imei:telephonyManager.getDeviceId(int slotid),获取imei;

imsi:telephonyManager.getSubscriberId(int slotid),获取imsi;

operator:telephonyManager.getSimOperator(long/5.0//int subid),这里要特别注意的是,获取operator需要用subid,并且,在android5.0版本,getSimOperator方法的参数类型为long,之后的版本改成了int,在反射获取方法的时候要特别注意;

simState:telephonyManager.getSimState(int slotid),获取手机sim卡的状态码;

以上信息的获取方法,在5.0到6.0之间都是被系统隐藏的方法,从6.0开始方法公开。

defaultDataSlotId:默认上网卡,5.0到6.0之间获取方法为,先获取subId,static SubscriptionManager.getDefaultDataSubId(),方法为隐藏的;再通过static SubscriptionManager.getSlotId(long/5.0//int subId),方法个版本都为隐藏的;从7.0开始方法名变为static SubscriptionManager.getDefaultDataSubscriptionId(),方法也变为公开的;

获取指定卡槽的SmsManager对象实例:5.0版本获取方法为static SmsManager.getSmsManagerForSubscriber(long subId),方法为隐藏的;从5.1版本开始获取的方法名为static SmsManager.getSmsManagerForSubscriptionId(int subId),方法是公开的,特别注意的是这里的参数类型也由long变为了int;

subId的获取:static SubscriptionManager.getSubId(int slotId),此方法一直被隐藏,从未公开。

二、android5.0一下版本双卡信息适配:
因为谷歌官方在5.0以上才开始对手机双卡进行支持,所以在5.0以下都是厂商自己加入了自定义的类来维护对双卡的支持,下面根据
几个大的厂商来讲解下他们自定义了哪些类来支持低版本的双卡功能:

1、联发科:MTK在低版本中的TeleManager中加入了一些方法,命名规则是xxxxGemini(),比如获取指定imei好就是getDeviceIdGemini(int slotId),
以此类推,但要注意的是,获取operator和imsi传入的参数不再是subId了,而是统一改用slotId去获取;此外,联发科还新增了几个类:
android.telephony.gemini.GeminiSmsManager ,com.mediatek.telephony.SmsManagerEx:这两个是指定sim卡发送短信用的,SmsManagerEx发送短信的方法是SmsManagerEx.getDefault().sendDataMessage(String desAddr, String scAddr, short port, byte[] data, PendingIntent sendIntent,PendingIntent deliveryIntent, int slotId);与原API中不同的是参数列表最后多传了一个slotId用于指定用哪张sim卡发送;而GeminiSmsManager不一样的地方是它在每个方法名后面都加了一个后缀Gemini,例如发送短信的方法就是static GeminiSmsManager.sendDataMessageGemini(String desAddr, String scAddr, short port, byte[] data, int slotId, PendingIntent sendIntent,PendingIntent deliveryIntent);
com.mediatek.telephony.TelephonyManagerEx:这个类是用于获取手机的imei、imsi、operator等信息用的,获取信息对应的方法名和原API中的TelephonyManager基本一致。
这几个自定义隐藏类大家可以把类反射出来看看里面有哪些内容。

2、高通:
android.telephony.MSimTelephonyManager:这个类是高通对低版本手机获取imei、imsi、operator等信息的兼容,获取信息的方法名基本和原API的TelephonyManager一致,注意的是,获取operator信息的方法参数与联发科的一样都改为了用slotId获取而不是subId。
android.telephony.MSimSmsManager:发送短信的类,调用方式为MSimSmsManager.getDefault().sendDataMessage(String desAddr, String scAddr, short port, byte[] data, PendingIntent sendIntent,PendingIntent deliveryIntent, int slotId),与原API的SmsManager不同的是,参数列表最后多了一个slotId,指定用哪张卡发送短信。
像华为、三星、小米等这些厂商都对低版本的双卡手机做了一定的修改,目前暂未收集完所有的获取信息,希望有知道的同学可以一起分享,完善对双卡手机信息的适配。


demo源码:https://github.com/haoxiangtt/DualSimInfo

关于android双卡手机sim卡信息采集适配的心得相关推荐

  1. android 短信数据库 双卡,关于android双卡手机sim卡信息采集适配的心得

    这几天通过对各个厂商的双卡信息适配的研究,总结了几点规律,写这篇心得主要是为了能够抛砖引玉,和大家一起分享,一起讨论,源码已上传. 一.android5.0以上(包含5.0)的版本双卡信息适配: 1. ...

  2. android获取手机sim卡信息,Android获取手机SIM卡运营商信息的方法

    本文实例讲述了Android获取手机SIM卡运营商信息的方法,对于Android程序设计有非常实用的价值.分享给大家供大家参考之用.具体方法如下: 主要功能代码如下: /** * 获取SIM卡运营商 ...

  3. android 获取sim卡,Android 获取手机SIM卡运营商

    直接上代码: /** * 获取SIM卡运营商 * * @param context * @return */ public static String getOperators(Context con ...

  4. Android怎么插手机卡,魅蓝E手机卡怎么装 魅蓝E手机SIM卡安装图文教程

    昨天下午,魅族发布了全新系列魅蓝手机--魅蓝E,定位魅蓝高端产品线,售价1299元,李楠号称魅蓝E采用三四千元的旗舰机工艺,外观/屏幕/拍照提升明显.此外,魅蓝E依旧支持全网通双卡双待.那么魅蓝E怎么 ...

  5. Android - xml动画,识别手势动作,代码抽取,获取手机SIM卡串号,获取联系人数据,开机广播,发送/解析短信,报警音乐

    转载请注明出处:https://blog.csdn.net/mythmayor/article/details/72878059 1.Activity的任务栈 1.类似一个木桶,每层只能放一个木块,我 ...

  6. Android开发之获取手机SIM卡信息

    TelephonyManager是一个管理手机通话状态.电话网络信息的服务类,该类提供了大量的getXxx(),方法获取电话网络的相关信息. TelephonyManager类概述: 可用于访问有关设 ...

  7. 手机SIM卡操作--android系统

    引言 引言 手机SIM卡,相对手机应用开发来说是一个比较底层,平时操作较少的部分.近期由于工作需要我准备对SIM卡进行一个系统的整体的探索.探索分为六部分: 手机卡进行短信的读写 联系人的读写 SIM ...

  8. Android怎么插手机卡,一加手机怎么装SIM手机卡 一加手机SIM卡取出与安装教程图解...

    期待已久的一加手机终于发布了,一加手机配备最顶级性能.创新多材质后壳,手感碉堡,另外还支持4G网络等等,亮点十足.一加手机作为一款高性价比精品手机,在今后势必会受到用户追捧,一加手机的卡槽设计与苹果手 ...

  9. android 渐变卡片,手机SIM卡的进化史,从有到无,渐变虚拟eSIM卡

    原标题:手机SIM卡的进化史,从有到无,渐变虚拟eSIM卡 SIM卡可以说是手机使用中不可缺少的伙伴,有了它,你的手机才可以真正意义上叫做手机,那么我现在像大家提出一个问题,你真的了解SIM卡吗?所以 ...

最新文章

  1. mysql和sql互导_Mysql和SqlServer互相转换
  2. Asp.net在线统计人数
  3. Linux 命令之 tail -- 在屏幕上显示指定文件的末尾若干行/显示文件尾部内容/查看文件尾部内容
  4. centos7加入第二块网卡无法识别
  5. MATLAB电压不平衡,电力系统不对称故障计算的Matlab算法程序
  6. 我会铭记这一天:2016年10月25日
  7. 01.jupyter环境安装
  8. opencv-api SIFT_create()
  9. C# Programming Study #2
  10. 第6篇 Java中的接口与抽象类
  11. ubuntu 12.04陷入software center的searching/cancelling...
  12. 20190825 On Java8 第十三章 函数式编程
  13. jeb java_jeb2 java 脚本插件
  14. matlab堆积式玫瑰图,用SAS实现堆积式南丁格尔玫瑰图Nightingale Rose Diagram (上)...
  15. opengl绘制太阳、地球、月亮,贴上纹理,设置光照,符合自转和公转规律
  16. 多个地点按距离远近进行排序
  17. Control Egress Traffic(0.8)
  18. GraphQL:你的容颜,十万光年
  19. 【PC工具】文字文本朗读工具,语音朗读软件,TTS语音合成
  20. Linux GRO流程分析

热门文章

  1. C语言随机函数为什么rand()每次产生的随机数都一样
  2. 微信公众号 - H5 网页接入微信支付(JSAPI)
  3. 模式识别与机器学习作业——SVM(Python实现)
  4. BOOtbootstrap框架应用
  5. 西门子1200与FANUC机器人Profinet通讯
  6. 图形图像处理案例3——爱心螺旋画,双心螺旋画
  7. 边界函数(decision boundary)
  8. LabVIEW之TDMS学习笔记
  9. 菜谱小程序_喝鸡尾酒食谱应用程序
  10. python面试题解析(前端、框架和其他)