Android获取手机本机号码的实现方法

反射TelephoneManager 获取本机号码,注意一下提供的接口有的SIM卡没写是获取不到的,该接口只适配Android5.0以上版本

public String getMsisdn(int slotId) {

return getLine1NumberForSubscriber(getSubIdForSlotId(slotId));

}

权限

public class RegisterMessage {

private static Context mContext;

private static TelephonyManager mTelephonyManager;

private ConnectivityManager mConnMngr;

private static SubscriptionManager mSubscriptionManager;

public RegisterMessage(Context context) {

mContext = context;

mTelephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);

if (mTelephonyManager == null) {

throw new Error("telephony manager is null");

}

mConnMngr = (ConnectivityManager) context

.getSystemService(Context.CONNECTIVITY_SERVICE);

mSubscriptionManager = SubscriptionManager.from(mContext);

}

public String getMsisdn(int slotId) {//slotId 0为卡1 ,1为卡2

return getLine1NumberForSubscriber(getSubIdForSlotId(slotId));

}

rivate int getSubIdForSlotId(int slotId) {

int[] subIds = getSubId(slotId);

if (subIds == null || subIds.length < 1 || subIds[0] < 0) {

return -1;

}

MLog.d("getSubIdForSlotId = "+subIds[0]);

return subIds[0];

}

private static int[] getSubId(int slotId) {

Method declaredMethod;

int[] subArr = null;

try {

declaredMethod = Class.forName("android.telephony.SubscriptionManager").getDeclaredMethod("getSubId", new Class[]{Integer.TYPE});

declaredMethod.setAccessible(true);

subArr = (int[]) declaredMethod.invoke(mSubscriptionManager,slotId);

} catch (ClassNotFoundException e) {

e.printStackTrace();

declaredMethod = null;

} catch (IllegalArgumentException e2) {

e2.printStackTrace();

declaredMethod = null;

} catch (NoSuchMethodException e3) {

e3.printStackTrace();

declaredMethod = null;

} catch (ClassCastException e4) {

e4.printStackTrace();

declaredMethod = null;

} catch (IllegalAccessException e5){

e5.printStackTrace();

declaredMethod = null;

}catch (InvocationTargetException e6){

e6.printStackTrace();

declaredMethod = null;

}

if(declaredMethod == null) {

subArr = null;

}

MLog.d("getSubId = "+subArr[0]);

return subArr;

}

private String getLine1NumberForSubscriber(int subId){

Method method;

String status = null;

try {

method = mTelephonyManager.getClass().getMethod("getLine1NumberForSubscriber", int.class);

method.setAccessible(true);

status = String.valueOf(method.invoke(mTelephonyManager, subId));

} catch (NoSuchMethodException e) {

e.printStackTrace();

} catch (IllegalAccessException e) {

e.printStackTrace();

} catch (IllegalArgumentException e) {

e.printStackTrace();

} catch (InvocationTargetException e) {

e.printStackTrace();

}

MLog.d("getLine1NumberForSubscriber = "+status);

return status;

}

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

android5.1本机号码,Android获取手机本机号码的实现方法相关推荐

  1. 【小功能2】android获取手机信息(号码,内存,CPU,分辨率,MAC,IP,SD卡,IMEI,经纬度,信号强度等等)

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://2402766.blog.51cto.com/2392766/1080837 为了 ...

  2. android获取手机和系统版本等信息的代码,Android获取手机的版本号等信息的代码...

    本文实例分享了Android获取手机系统版本等信息的方法,供大家参考,具体内容如下: 第一种代码: String phoneInfo = "Product: " + android ...

  3. android通过sim卡获取本机号码,Android获取本机号码及Sim卡状态

    SIM卡存储的数据可分为四类: 第一类是固定存放的数据.这类数据在移动电话机被出售之前由SIM卡中心写入,包括国际移动用户识别号(IMSI).鉴权密钥(KI).鉴权和加密算法等等. 第二类是暂时存放的 ...

  4. android 6.0获取手机imei,android获取手机信息大全,android获取大全,IMEI号,IESI号,...

    android获取手机信息大全,android获取大全,IMEI号,IESI号, IMEI号,IESI号,手机型号: [java] view plaincopyprint?private void g ...

  5. Qt for Android获取手机序列号/手机型号/手机制造商

    前言 Qt for Android 获取手机型号/手机制造商/手机序列号,这些是要通过 Android 原生接口才能获取到的, 那么在 Qt 项目中通过 jni 接口调用 Android 原生接口来获 ...

  6. android 获取手机运行的进程

    今天,简单讲讲如何获取系统运行的进程. ActivityManager.RunningAppProcessInfo类与获取正在运行的应用程序 每一个应用程序都会运行在它独立的进程里,但是为了节省资源或 ...

  7. android 获取已安装 错误代码,android获取手机已经安装的app信息

    Android获取手机已安装APP(系统/非系统) 效果图 主体代码 private ListView mlistview; private ListpackageInfoList; private ...

  8. 获取android型号代码,Android应用开发之Android获取手机品牌、手机型号、手机唯一序列号的代码教程...

    本文将带你了解Android应用开发Android获取手机品牌.手机型号.手机唯一序列号的代码教程,希望本文对大家学Android有所帮助. Android获取手机品牌.手机型号.手机唯一序列号的代码 ...

  9. Android获取手机序列号

    Android获取手机序列号 String androidId = null; androidId = Secure.getString(getContentResolver(), Secure.AN ...

最新文章

  1. Java各种数据类型,自己学习写的笔记!!!
  2. [HNOI 2010]Planar
  3. nginx开机自启动
  4. JavaScript学习总结(12)——2016 年 7 个顶级 JavaScript 框架
  5. 我的开源项目:JPEG分析器
  6. Linux下vsftpd的安装,Java上传文件实现。
  7. risksystem_环境风险评价系统(RiskSystem)
  8. 刚进公司还不会SVN?,SVN使用教程
  9. 【Git】解决Untracked Files Prevent Checkout的问题
  10. 基于AD7705的32路AD采集
  11. 六、Linux常用命令之压缩打包篇(gzip、gunzip、tar、zip、bzip2)
  12. api多版本方案(URL)
  13. 植物2 IOS 怎么实名认证_植物大战僵尸2未来世界22天困难怎么过关 植物阵容推荐...
  14. Hands-on C++ Game Animation Programming阅读笔记(三)
  15. 各大搜索引擎网站登录入口大全
  16. 小红书怎么点击查看大图_小红书图片如何调整呢?
  17. sequoia 的详细安装步骤
  18. 支付宝个人收款解决方案
  19. Svchost.exe占用内存过大解决
  20. 你可能用错了 kafka 的重试机制

热门文章

  1. 企业联网直报的网上数据12312313安全防范问题
  2. NEAR 智能合约开发
  3. python elif报错_python循环的elif报错是什么原因
  4. vim配置全攻略(2)——vim的简单配置
  5. HMS Core地理围栏能力助你实现指定范围人群的精准消息推送
  6. 两条不重复的最大路径
  7. 为什么变频空调省电的原理和分析
  8. 常用开发(Case-计算机辅助软件工程)工具分类
  9. 钱龙软件不停显示港股服务器,帮助中心 | 钱龙,中国领先的实时金融资讯平台...
  10. 《人工智能产品经理--人机对话系统设计逻辑探究》