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获取手机本机号码的实现方法所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)