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

Android获取手机本机号码的实现方法,第1张

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

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

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

 public String getMsisdn(int slotID) {    return getline1NumberForSubscriber(getSubIDForSlotID(slotID));  }

  权限

<uses-permission androID:name="androID.permission.READ_PHONE_STATE"/> 
  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; } 

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

总结

以上是内存溢出为你收集整理的Android获取手机本机号码的实现方法全部内容,希望文章能够帮你解决Android获取手机本机号码的实现方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1144200.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存