在 Android 中获取错误的移动前缀

Getting the Wrong Mobile Prefix in Android

我正在制作一个应用程序,我将从 sim 卡中获取用户的完整 phone 号码 - 包括国家和手机前缀。我的 phone 号码是 061555555,所以当我将它保存到服务器时,它应该如下所示:+38761555555。

这是我的问题 - 当我使用下面的代码时,我得到以下信息:+387218900032555555,即。 不是061变成61,而是变成218900032。此行号给出了错误的数字:

MyPhoneNumber = tMgr.getLine1Number(); 

我也试过this and this.

这是我的代码:

// Get users phone number
private String getMyPhoneNumber() {
    TelephonyManager tMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);

    // Get the SIM country ISO code
    String simCountry = tMgr.getSimCountryIso().toUpperCase();
    // Get the operator code of the active SIM (MCC + MNC)
    String simOperatorCode = tMgr.getSimOperator();
    // Get the name of the SIM operator
    String simOperatorName = tMgr.getSimOperatorName();
    // Get the SIM’s serial number
    String simSerial = tMgr.getSimSerialNumber();

    String MyPhoneNumber = "0000000000";

    try {
        MyPhoneNumber = tMgr.getLine1Number();
    } catch (NullPointerException ex) {
    }

    if (MyPhoneNumber.equals("")) {
        MyPhoneNumber = tMgr.getSubscriberId();
    }

    PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
    Phonenumber.PhoneNumber countryNumberProto = null;
    try {
        countryNumberProto = phoneUtil.parse(MyPhoneNumber, simCountry);
    } catch (NumberParseException e) {
        System.err.println("NumberParseException was thrown: " + e.toString());
    }

    String myPhone = phoneUtil.format(countryNumberProto, PhoneNumberUtil.PhoneNumberFormat.E164);
    // I tried INTERNATIONAL and NATIONAL as well

    return myPhone;
}

我认为您正在解析 "national_number" 而不是 "country_code"。检查您的JSON 解析代码字段逻辑

{
  "country_code": 41,
  "national_number": 446681800
}

https://github.com/googlei18n/libphonenumber

我检查了我的设置->状态,发现我的 phone 号码是未知的,它显示的不是我的 phone 号码而是 IMEI,所以我想我会让用户确认他的 phone 手动输入号码。