Android如何获取手机本机号码

来源:互联网 发布:谁有微信淘宝免单群 编辑:程序博客网 时间:2024/04/29 20:21

反射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));    }  private 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;    }