如何在Android中以编程方式从手机获取SIM卡号码?

时间:2015-03-05 12:03:07

标签: android

我已经浏览了sto上的所有链接。

private String getMyPhoneNumber(){
    TelephonyManager mTelephonyMgr;
    mTelephonyMgr = (TelephonyManager)
            getSystemService(Context.TELEPHONY_SERVICE); 
    return mTelephonyMgr.getLine1Number();
}

private String getMy10DigitPhoneNumber(){
    String s = getMyPhoneNumber();
    return s.substring(2);
}

但大多数情况下它返回null。 是否无法在Android中的电话管理器中追踪电话号码,或者是否有其他出路。

2 个答案:

答案 0 :(得分:1)

在您的清单文件中,请添加以下行:

<uses-permission android:name="android.permission.READ_PHONE_STATE"/> 

同样在java文件中添加以下行:

 TelephonyManager telemamanger = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
    String getSimSerialNumber = telemamanger.getSimSerialNumber();
    String getSimNumber = telemamanger.getLine1Number();

答案 1 :(得分:0)

以下是有关如何获取SimSerial和其他内容的示例。

            // Collecting device details
            TelephonyManager tm = (TelephonyManager) c
                    .getSystemService(Context.TELEPHONY_SERVICE);

            String model = android.os.Build.MODEL;
            String brand = android.os.Build.BRAND;

            String id = tm.getDeviceId();
            String simSerial = tm.getSimSerialNumber();
            String simCountry = tm.getSimCountryIso();
            String simOperator = tm.getSimOperatorName();
            String networkCountry = tm.getNetworkCountryIso();

但获取电话号码是不可能的,但我找到了一个小解决方案     //返回用户电话号码         public String getUserPhone(){

        AccountManager mAccountManager = AccountManager.get(mContext);
        Account[] mAccounts = mAccountManager.getAccounts();

        for(Account mAccount:mAccounts){

                Log.d("X","name:"+mAccount.name);
                Log.d("X","type:"+mAccount.type);

            if(isPhoneValid(mAccount.name)){
                return mAccount.name;
            }
        }

        return null;
    }

    public static boolean isPhoneValid(String phone) {
          boolean retval = false;
          String phoneNumberPattern = 
          "(\\d-)?(\\d{3}-)?\\d{3}-\\d{4}";
          retval = phone.matches(phoneNumberPattern);
          String msg = "NO MATCH: pattern:" + phone
          + "\r\n regex: " + phoneNumberPattern;
          if (retval) {
             msg = " MATCH: pattern:" + phone 
             + "\r\n regex: " + phoneNumberPattern;
          }
          System.out.println(msg + "\r\n");
          return retval;
       }

你必须设置

<uses-permission android:name="android.permission.GET_ACCOUNTS"/>

使用帐户。

正如您所看到的,我正在从帐户中收集电话号码,这仅适用于用户手机上有WhatsApp,Telegram或类似内容的情况。因此,如果上述方法[getUserPhone()]返回null,我曾经手动询问电话号码。