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;
}
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!