废话不多,直接上干货==>

1 以下所有方法都需要在AndroidManifest.xml声明权限

<uses-permission android:name="android.permission.READ_PHONE_STATE" />

声明权限后,请确认在手机应用权限界面设备信息一栏已经勾选上。

2 原生api获取sim卡id,只能获取单卡

TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
String id = telephonyManager.getSubscriberId();

3 获取sim卡数量

SubscriptionManager mSubscriptionManager = SubscriptionManager.from(this);
int simNumberCard = mSubscriptionManager.getActiveSubscriptionInfoCount();//获取当前sim卡数量

3.5 打印SIM卡信息:

SubscriptionManager mSubscriptionManager = SubscriptionManager.from(this);
List<SubscriptionInfo> mSubInfoList = mSubscriptionManager.getActiveSubscriptionInfoList();for (SubscriptionInfo info : mSubInfoList) {Log.i("log",info.toString());}

小米6插上双卡输出日志:

{id=1, iccId=898611150[****] simSlotIndex=0 displayName=中国电信 carrierName=中国电信 nameSource=0 iconTint=-16746133 dataRoaming=0 iconBitmap=android.graphics.Bitmap@b482d41 mcc 460 mnc 11}
{id=4, iccId=898601188[****] simSlotIndex=1 displayName=中国联通 carrierName=中国联通 nameSource=0 iconTint=-16746133 dataRoaming=0 iconBitmap=android.graphics.Bitmap@ccb42e6 mcc 460 mnc 9}

其中simSlotIndex = 0 是主卡,1是副卡
这种方法可以获取SIM卡数量和运营商,但是不能获取sim卡id。

4 获取sim卡id

public HashSet<String> getSecondImsi(Context context)  {TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);Class<?> telephonyclass = telephonyManager.getClass();Method method = null;boolean param = true;try {method = telephonyclass.getDeclaredMethod("getSubscriberId",int.class);}catch (NoSuchMethodException e){try {method = telephonyclass.getDeclaredMethod("getSubscriberId",long.class);param = false;}catch (NoSuchMethodException e2) {}}Object object = null;HashSet<String> buildSet = new HashSet<>();if (param){for(int i = 0;i < 9;i++) {try {object = method.invoke(telephonyManager,i);if (object != null){buildSet.add(object.toString());}} catch (Exception e) {e.printStackTrace();}}}return buildSet;}

在小米6和华为荣耀10手机上测试通过,可以返回两个sim卡的id。



2020-1-1 add:

  • 发现在出国或出境的情况下,getSubscriberId值会变化,这种情况下就不能作为唯一值。可以用iccid作为唯一值(ICCID:集成电路卡识别码,相当于手机号码的身份证)

5 获取ICCID:

goog提供的方法

TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
return tm.getSimSerialNumber();

双卡获取参考3

SubscriptionManager mSubscriptionManager = SubscriptionManager.from(this);
List<SubscriptionInfo> mSubInfoList = mSubscriptionManager.getActiveSubscriptionInfoList();
for (SubscriptionInfo info : mSubInfoList) {Log.i("log",info.getIccId());
}

参考:
https://blog.csdn.net/ymcl_hx/article/details/53484797
https://blog.csdn.net/u010429219/article/details/75112800

双卡android手机SIM卡信息探索 ,获取手机 SIM卡数量和SIM卡id、iccid相关推荐

  1. android开发获取手机,通过ADB获取Android手机信息,获取手机信息

    通过ADB获取Android手机信息,获取手机信息 原文:https://blog.csdn.net/fasfaf454/article/details/51438743 1.获取手机系统信息( CP ...

  2. Android项目:手机安全卫士(15)—— 获取手机安装应用与存储空间

    Android项目:手机安全卫士(15)-- 获取手机安装应用与存储空间 1 介绍 今天来讲讲手机安全卫士的第三个功能:软件管理,其实也不应该叫管理,称为软件应用信息查看更正确一点,就是显示手机已安装 ...

  3. android nfc读取公交卡信息_荣耀手机NFC升级了:公交、门禁、支付、饭卡、加密卡还能写卡...

    2019年双十一期间,入手了荣耀magic2手机,其实去年用过一次,今年换了多次还是特别喜欢,主要是麒麟980旗舰CPU,全面滑屏特有面子. 入手的第一时间,自己就启用了手机的钱包功能,手机钱包除了小 ...

  4. js获取PC设备信息,js获取手机设备信息,最全

    获取设备系统和型号<封装方法> <!DOCTYPE htmlPUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" &qu ...

  5. h5获取android手机版本,Vue.js怎么获取手机系统型号、版本、浏览器类型

    Vue.js怎么获取手机系统型号.版本.浏览器类型 发布时间:2020-07-28 11:22:33 来源:亿速云 阅读:161 作者:小猪 这篇文章主要为大家展示了Vue.js怎么获取手机系统型号. ...

  6. 通过java获取手机信息_android获取手机信息

    玩Android的朋友们进来看看吧! 1.获取手机安装的应用信息(排除系统自带): Java代码: 1 private String getAllApp() { 2 String result = & ...

  7. 浏览器js 获取手机标识信息_手机软件多次要求获取手机信息,习惯性让其通过有安全隐患?...

    大家在平常用手机新安装一个手机软件时,第一次打开该软件都会提示需要你允许该软件获取你的信息,为了方便我们一般都不会仔细去看究竟是哪一项权限,大多数的APP只是申请要麦克风或者摄像头的权限而已.但是总是 ...

  8. android 常用机型尺寸_Android中获取手机屏幕大小的方法

    本文为大家解析Android中如何获取手机屏幕大小,提供一个解决方法,分享给大家供大家参考,具体内容如下 运行效果图: 运行程序后,当我们点击Button按钮时,可以看到下面的效果图: 具体代码: 我 ...

  9. php获取手机设备信息,H5获取手机设备信息、app版本信息、ip地址

    获取手机设备的相关信息,如IMEI.IMSI.型号.厂商等.通过plus.device获取设备信息管理对象. 获取当前运行环境信息.与其它程序进行通讯等.通过plus.runtime可获取运行环境管理 ...

最新文章

  1. 杂谈---改变个人习惯
  2. Android Studio 项目代码全部消失--出现原因及解决方法
  3. checkbox未赋值时获取value是on_C语言中的指针——指针的赋值和指向
  4. js------搜索敏感词正则表达式Math方法
  5. Python IDLE(shell清屏配置方法)
  6. EditPlust 批量添加自定义工具
  7. dfs中return回溯问题
  8. HDU 2602.Bone Collector-动态规划0-1背包
  9. mysql的其中连接方式_MySQL选择连接中的位置,但不在其中
  10. excel 异常来自 HRESULT:0x80010105 (RPC_E_SERVERFAULT)
  11. JAVA之多线程概念及其几种实现方法优劣分析
  12. MVC 之Action
  13. 最好的5个C++ 网站
  14. c# 代码编辑器 支持多种语言,支持多种编程语言与系统的跨平台代码编辑器——微软 Visual Studio Code...
  15. 波束形成MATLAB代码
  16. css样式实现居中对齐
  17. php求圆柱体积,认识圆柱体a href=http://ruiwen.com/friend/list.php(教师中心专稿)/a -- 小学数学教学资源网...
  18. 计算机不支持win10 1809更新,Win10 1809更新失败解决方法
  19. Hive报错Error during job, obtaining debugging information...
  20. 激光SLAM:激光雷达运动畸变补偿--轮速里程计辅助方法

热门文章

  1. 智力题---100个球两个人轮流拿,每次最多拿n个,谁拿到最后一个球获胜
  2. 百度地图Polyline实现多颜色绘制
  3. 分布式图数据库JanusGraph-简介
  4. 小啊呜产品读书笔记001:《邱岳的产品手记-01》 阅读计划内容简介
  5. No.5 Python数字
  6. 以mysql为例有几种隔离级别_mysql有几种隔离级别
  7. F - 士兵队列训练问题 HDU - 1276
  8. 无人便利店抢人饭碗?这些“黑科技”将创造百万就业
  9. 软件项目管理系统-经费报销-出差费
  10. ISE14.7生成MCS文件