热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

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

这篇文章主要介绍了Android获取手机本机号码的实现方法的相关资料,希望通过本文大家能够实现这样的方法,需要的朋友可以参考下

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; 
} 

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


推荐阅读
  • 一个建表一个执行crud操作建表代码importandroid.content.Context;importandroid.database.sqlite.SQLiteDat ... [详细]
  • A*算法在AI路径规划中的应用
    路径规划算法用于在地图上找到从起点到终点的最佳路径,特别是在存在障碍物的情况下。A*算法是一种高效且广泛使用的路径规划算法,适用于静态和动态环境。 ... [详细]
  • LDAP服务器配置与管理
    本文介绍如何通过安装和配置SSSD服务来统一管理用户账户信息,并实现其他系统的登录调用。通过图形化交互界面配置LDAP服务器,确保用户账户信息的集中管理和安全访问。 ... [详细]
  • Android 自定义 RecycleView 左滑上下分层示例代码
    为了满足项目需求,需要在多个场景中实现左滑删除功能,并且后续可能在列表项中增加其他功能。虽然网络上有很多左滑删除的示例,但大多数封装不够完善。因此,我们尝试自己封装一个更加灵活和通用的解决方案。 ... [详细]
  • 如果应用程序经常播放密集、急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了。因为MediaPlayer存在如下缺点:1)延时时间较长,且资源占用率高 ... [详细]
  • 本文详细介绍了 Charles 工具的下载、安装、配置及使用方法,特别针对 HTTP 和 HTTPS 协议的数据抓取进行了说明。 ... [详细]
  • 网络爬虫的规范与限制
    本文探讨了网络爬虫引发的问题及其解决方案,重点介绍了Robots协议的作用和使用方法,旨在为网络爬虫的合理使用提供指导。 ... [详细]
  • 本文介绍了 AngularJS 中的 $compile 服务及其用法,通过示例代码展示了如何使用 $compile 动态编译和链接 HTML 元素。 ... [详细]
  • javax.mail.search.BodyTerm.matchPart()方法的使用及代码示例 ... [详细]
  • 本文详细介绍了 Python 中 thread 和 threading 模块的使用方法,并提供了丰富的示例和解释。文章首发于 HURUWO 的博客小站,本平台进行同步备份发布。如遇图片加载失败或有任何疑问,欢迎前往原博客留言。 ... [详细]
  • Flutter 2.* 路由管理详解
    本文详细介绍了 Flutter 2.* 中的路由管理机制,包括路由的基本概念、MaterialPageRoute 的使用、Navigator 的操作方法、路由传值、命名路由及其注册、路由钩子等。 ... [详细]
  • [c++基础]STL
    cppfig15_10.cppincludeincludeusingnamespacestd;templatevoidprintVector(constvector&integer ... [详细]
  • ZooKeeper 入门指南
    本文将详细介绍ZooKeeper的工作机制、特点、数据结构以及常见的应用场景,包括统一命名服务、统一配置管理、统一集群管理、服务器动态上下线和软负载均衡。 ... [详细]
  • 自动验证时页面显示问题的解决方法
    在使用自动验证功能时,页面未能正确显示错误信息。通过使用 `dump($info->getError())` 可以帮助诊断和解决问题。 ... [详细]
  • 国联物流是一家由国家出资设立的国有企业,全称为湖南国联物流有限公司,成立于2001年3月,前身为株洲国联货运部。公司现办公地点位于湖南长沙,专注于大件运输、药品配送及第三方物流服务。 ... [详细]
author-avatar
mobiledu2502901927
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有