Android获取手机本机号码的实现方法
Android获取手机本机号码的实现方法
反射TelephoneManager获取本机号码,注意一下提供的接口有的SIM卡没写是获取不到的,该接口只适配Android5.0以上版本
publicStringgetMsisdn(intslotId){ returngetLine1NumberForSubscriber(getSubIdForSlotId(slotId)); }
权限
publicclassRegisterMessage{ privatestaticContextmContext; privatestaticTelephonyManagermTelephonyManager; privateConnectivityManagermConnMngr; privatestaticSubscriptionManagermSubscriptionManager; publicRegisterMessage(Contextcontext){ mContext=context; mTelephonyManager=(TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); if(mTelephonyManager==null){ thrownewError("telephonymanagerisnull"); } mConnMngr=(ConnectivityManager)context .getSystemService(Context.CONNECTIVITY_SERVICE); mSubscriptionManager=SubscriptionManager.from(mContext); }
publicStringgetMsisdn(intslotId){//slotId0为卡1,1为卡2 returngetLine1NumberForSubscriber(getSubIdForSlotId(slotId)); } rivateintgetSubIdForSlotId(intslotId){ int[]subIds=getSubId(slotId); if(subIds==null||subIds.length<1||subIds[0]<0){ return-1; } MLog.d("getSubIdForSlotId="+subIds[0]); returnsubIds[0]; } privatestaticint[]getSubId(intslotId){ MethoddeclaredMethod; int[]subArr=null; try{ declaredMethod=Class.forName("android.telephony.SubscriptionManager").getDeclaredMethod("getSubId",newClass[]{Integer.TYPE}); declaredMethod.setAccessible(true); subArr=(int[])declaredMethod.invoke(mSubscriptionManager,slotId); }catch(ClassNotFoundExceptione){ e.printStackTrace(); declaredMethod=null; }catch(IllegalArgumentExceptione2){ e2.printStackTrace(); declaredMethod=null; }catch(NoSuchMethodExceptione3){ e3.printStackTrace(); declaredMethod=null; }catch(ClassCastExceptione4){ e4.printStackTrace(); declaredMethod=null; }catch(IllegalAccessExceptione5){ e5.printStackTrace(); declaredMethod=null; }catch(InvocationTargetExceptione6){ e6.printStackTrace(); declaredMethod=null; } if(declaredMethod==null){ subArr=null; } MLog.d("getSubId="+subArr[0]); returnsubArr; } privateStringgetLine1NumberForSubscriber(intsubId){ Methodmethod; Stringstatus=null; try{ method=mTelephonyManager.getClass().getMethod("getLine1NumberForSubscriber",int.class); method.setAccessible(true); status=String.valueOf(method.invoke(mTelephonyManager,subId)); }catch(NoSuchMethodExceptione){ e.printStackTrace(); }catch(IllegalAccessExceptione){ e.printStackTrace(); }catch(IllegalArgumentExceptione){ e.printStackTrace(); }catch(InvocationTargetExceptione){ e.printStackTrace(); } MLog.d("getLine1NumberForSubscriber="+status); returnstatus; }
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!