2019独角兽企业重金招聘Python工程师标准>>>

关于android各种双卡手机获取imei,imsi的处理(mtk,展讯,高通等)

目前国内对于双卡智能手机的需求还是很大的,各种复杂的业务会涉及到双卡模块;而android标准的api又不提供对双卡的支持。导致国内双卡模块标准混乱,各个厂商各玩各的。目前我知道的双卡解决方案就有:mtk,展讯,高通,broadcom等

首先是最为应用广泛的mtk平台,国内山寨手机以及一些低端品牌双卡都是做的mtk的双卡解决方案

private static void initMtkDoubleSim() {try {TelephonyManager tm = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);Class<?> c = Class.forName("com.android.internal.telephony.Phone");Field fields1 = c.getField("GEMINI_SIM_1");fields1.setAccessible(true);simId_1 = (Integer) fields1.get(null);Field fields2 = c.getField("GEMINI_SIM_2");fields2.setAccessible(true);simId_2 = (Integer) fields2.get(null);Method m = TelephonyManager.class.getDeclaredMethod("getSubscriberIdGemini", int.class);imsi_1 = (String) m.invoke(tm, simId_1);imsi_2 = (String) m.invoke(tm, simId_2);Method m1 = TelephonyManager.class.getDeclaredMethod("getDeviceIdGemini", int.class);imei_1 = (String) m1.invoke(tm, simId_1);imei_2 = (String) m1.invoke(tm, simId_2);Method mx = TelephonyManager.class.getDeclaredMethod("getPhoneTypeGemini", int.class);phoneType_1 = (Integer) mx.invoke(tm, simId_1);phoneType_2 = (Integer) mx.invoke(tm, simId_2);if (TextUtils.isEmpty(imsi_1) && (!TextUtils.isEmpty(imsi_2))) {defaultImsi = imsi_2;}if (TextUtils.isEmpty(imsi_2) && (!TextUtils.isEmpty(imsi_1))) {defaultImsi = imsi_1;}} catch (Exception e) {isMtkDoubleSim = false;return;}isMtkDoubleSim = true;}

可见,在TelephonyManager中提供了**Gemini的方法,可以用反射很方便地获取到相应的信息。

还有

private static void initMtkSecondDoubleSim() {try {TelephonyManager tm = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);Class<?> c = Class.forName("com.android.internal.telephony.Phone");Field fields1 = c.getField("GEMINI_SIM_1");fields1.setAccessible(true);simId_1 = (Integer) fields1.get(null);Field fields2 = c.getField("GEMINI_SIM_2");fields2.setAccessible(true);simId_2 = (Integer) fields2.get(null);Method mx = TelephonyManager.class.getMethod("getDefault",int.class);TelephonyManager tm1 = (TelephonyManager) mx.invoke(tm, simId_1);TelephonyManager tm2 = (TelephonyManager) mx.invoke(tm, simId_2);imsi_1 = tm1.getSubscriberId();imsi_2 = tm2.getSubscriberId();imei_1 = tm1.getDeviceId();imei_2 = tm2.getDeviceId();phoneType_1 = tm1.getPhoneType();phoneType_2 = tm2.getPhoneType();if (TextUtils.isEmpty(imsi_1) && (!TextUtils.isEmpty(imsi_2))) {defaultImsi = imsi_2;}if (TextUtils.isEmpty(imsi_2) && (!TextUtils.isEmpty(imsi_1))) {defaultImsi = imsi_1;}} catch (Exception e) {isMtkSecondDoubleSim = false;return;}isMtkSecondDoubleSim = true;}

看样子有似乎也是属于mtk平台的解决方案,因为都有GEMINI_SIM_1属性,这种双卡方案只在联想278t上发现过;有两个TelephonyManager实例,根据getDefault方法获取

下面是展讯平台的(貌似市面上手机不多啊):

private static void initSpreadDoubleSim() {try {Class<?> c = Class.forName("com.android.internal.telephony.PhoneFactory");Method m = c.getMethod("getServiceName", String.class, int.class);spreadTmService = (String) m.invoke(c, Context.TELEPHONY_SERVICE, 1);TelephonyManager tm = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);imsi_1 = tm.getSubscriberId();imei_1 = tm.getDeviceId();phoneType_1 = tm.getPhoneType();TelephonyManager tm1 = (TelephonyManager) mContext.getSystemService(spreadTmService);imsi_2 = tm1.getSubscriberId();imei_2 = tm1.getDeviceId();phoneType_2 = tm1.getPhoneType();if (TextUtils.isEmpty(imsi_1) && (!TextUtils.isEmpty(imsi_2))) {defaultImsi = imsi_2;}if (TextUtils.isEmpty(imsi_2) && (!TextUtils.isEmpty(imsi_1))) {defaultImsi = imsi_1;}} catch (Exception e) {isSpreadDoubleSim = false;return;}isSpreadDoubleSim = true;}

这个没有展讯sdk的话还是很难找的吧?

下面是高通的:(貌似高通做的不咋的有些接口没有双卡实现啊)

public static void initQualcommDoubleSim() {
try {
TelephonyManager tm = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
Class<?> cx = Class
.forName("android.telephony.MSimTelephonyManager");
Object obj =mContext.getSystemService(
"phone_msim");
simId_1 = 0;
simId_2 = 1;Method mx = cx.getMethod("getDataState");
// int stateimei_1 = (Integer) mx.invoke(cx.newInstance());
int stateimei_2 = tm.getDataState();
Method mde = cx.getMethod("getDefault");
Method md = cx.getMethod("getDeviceId", int.class);
Method ms = cx.getMethod("getSubscriberId", int.class);
Method mp = cx.getMethod("getPhoneType");// Object obj = mde.invoke(cx);imei_1 = (String) md.invoke(obj, simId_1);
imei_2 = (String) md.invoke(obj, simId_2);imsi_1 = (String) ms.invoke(obj, simId_1);
imsi_2 = (String) ms.invoke(obj, simId_2);int statephoneType_1 = tm.getDataState();
int statephoneType_2 = (Integer) mx.invoke(obj);
Log.e("tag", statephoneType_1 + "---" + statephoneType_2);// Class<?> msc = Class.forName("android.telephony.MSimSmsManager");
// for (Method m : msc.getMethods()) {
// if (m.getName().equals("sendTextMessage")) {
// m.getParameterTypes();
// }
// Log.e("tag", m.getName());
// }} catch (Exception e) {
isQualcommDoubleSim = false;
return;
}
isQualcommDoubleSim = true;}

getPhoneType&getDataState 方法看了底层发现没有双卡实现,目前也不知道该咋办...

转载于:https://my.oschina.net/u/266323/blog/175407

关于android各种双卡手机获取imei,imsi的处置(mtk,展讯,高通等)相关推荐

  1. 【记录】 Android 双卡手机获取IMEI等

    1.前言 项目中遇到上传手机imei的问题.如果手机是双卡,目前只能获取默认的imei TelephonyManager mTelephonyMgr = (TelephonyManager) getS ...

  2. 介绍一种Android 平台 不需要获取imei imsi 无权限就能获取手机运营商的方法

    demo 链接:https://github.com/miqt/GetOperator 先贴一下需要权限,然后通过获取 imsi 根据前缀判断运营商的方法: if (checkPermission(c ...

  3. Android 12 通过 adb 获取 imei 信息

    Android 12 通过 adb 获取 imei 信息 小米 E:\exe>adb shell "service call iphonesubinfo 1 | cut -c 52-6 ...

  4. 高通 mtk 展讯等芯片机型读取 备份手机全字库分区 的一些操作解析

    这个工具结合mtkclient对软件修改了多机型支持,支持 高通 mtk 展讯等芯片的字库备份等其他多功能选项 通过个人实测图示展现以下软件的几个功能 1---安卓各选项简单说明 第一个安卓界面是读取 ...

  5. Android系统信息获取 之十一:获取IMEI,IMSI号

    对于移动信息的获取本不想再写,只是在开发的过程中还是有同事来讨论,因此就单独再把几个重要的信息获取点给列出来,供查询使用. IMEI号,IMSI号的知识点可参考:IMSI号和IMEI解释 Androi ...

  6. android10获取imei,Android 10 root用户获取imei

    IMEI(International Mobile Equipment Identity)是国际移动设备识别码的缩写,由15-17位数字组成,与手机是一一对应的关系.无论刷机还是恢复出厂设置,该设备标 ...

  7. android10 imei横线,Android 10 root用户获取imei

    IMEI(International Mobile Equipment Identity)是国际移动设备识别码的缩写,由15-17位数字组成,与手机是一一对应的关系.无论刷机还是恢复出厂设置,该设备标 ...

  8. mtk,展讯等手机平台知识杂烩

    mtk 采用联法科技的MT6205.MT6217.MT6218.MT6219.MT6226.MT6227.MT6228基带芯片,芯片均采用ARM7 的核. MT6305.MT6305B为电源管理芯片 ...

  9. 手机行业加速萎靡,Q1业绩下滑的高通还有新故事吗?

    智能手机的出货量跌至冰点,高通也交出了一份"寒气"逼人的财报. 图源:高通 2023年2月3日凌晨,高通披露了2023财年Q1财务报告,营收94.63亿美元,同比下跌12%:净利润 ...

最新文章

  1. 插入排序 链表 java_Java实现 LeetCode 147 对链表进行插入排序
  2. u32和字符串的转换函数
  3. Objective-C ,ios,iphone开发基础:NSDictionary(字典) 和 NSMutableDictionary
  4. python时间模块哪个好arrow模块_python库: arrow (时间)
  5. 计算机应用发表论文,计算机应用论文发表.docx
  6. c# linq的差集,并集,交集,去重【转】
  7. 金山云发布全新Serverless产品 云原生基础设施再升级
  8. 部署LNMP架构及其应用
  9. c语言中static使用方法
  10. Java 核心编程技术干货,2019 最新整理版
  11. z变换与s变换之间的转换(一些零碎且不严谨的想法)
  12. 某P2P开发商ERP系统核心业务介绍
  13. 支付宝接口对接指南(一、支付宝文档解读和支付宝侧沟通)【保姆级】
  14. 一看就会的侧方位停车技巧 见了就收了吧
  15. python公众号接口_用Python实现微信公众号API素材库图文消息抓取
  16. 微信小程序中的wx.navigateTo跳转路径写法
  17. 基于OpenSSL,实现SM2签名数据的ASN1编码转换
  18. [CVPR2021]pi-GAN: Periodic Implicit Generative Adversarial Networks for 3D-Aware Image Synthesis
  19. vscode 关闭 编辑框右侧的 预览框
  20. python实现渐变图像

热门文章

  1. 人体识别_电子皮肤用于人体状态识别的柔性集成传感器
  2. Spring 整合 Mybatis
  3. java语言就业方向_四大就业方向彻底解决你学习Java语言编程的后顾之忧-生活感悟与随笔 -亦是美网络...
  4. mysql游标进阶_MYSQL进阶学习知识拓展一:MySQL 存储过程之游标!
  5. C#图解教程 第十三章 委托
  6. bzoj1037[ZJOI2008]生日聚会Party dp
  7. CSS多行文字垂直居中的两种方法
  8. 诗与远方:无题(六十八)
  9. Mybatis出现文档根元素 mapper 必须匹配 DOCTYPE 根 configuration错误解决办法
  10. Oracle设置和修改system和scott的口令,并且如何连接到system和scott模式下