Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android中获取错误的移动前缀_Android_Telephonymanager_Libphonenumber_Phonenumberutils - Fatal编程技术网

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

在Android中获取错误的移动前缀,android,telephonymanager,libphonenumber,phonenumberutils,Android,Telephonymanager,Libphonenumber,Phonenumberutils,我正在制作一个应用程序,我将从sim卡中获取用户的完整电话号码,包括国家和手机前缀。我的电话号码是061555555,所以当我将它保存到服务器时,它应该是这样的:+387615555 这是我的问题——当我使用下面的代码时,我得到了以下结果:+3872188900032555555,也就是说,不是061变成61,而是218900032。此行号给出了错误的号码: MyPhoneNumber = tMgr.getLine1Number(); 我也试过,也试过 这是我的代码: // Get user

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

这是我的问题——当我使用下面的代码时,我得到了以下结果:+3872188900032555555,也就是说,不是061变成61,而是218900032。此行号给出了错误的号码:

MyPhoneNumber = tMgr.getLine1Number(); 
我也试过,也试过

这是我的代码:

// 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;
}
我想你是在解析“国家编号”而不是“国家代码”。检查JSON解析代码字段逻辑

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

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

当我调试时,我得到的是以下信息:
国家代码:387国家号码2189003255555
。这表示38不是“simCountry”的国家代码,上面的一个与您的Q相同。我的国家代码是387,但我的国家号码(手机前缀)应该以61开头,而不是21890032。对不起,如果我没有正确理解您的答案,我再次更新了代码。请您指出我的代码错误。这是您的JSON对象号{“代码”:“+387”,“名称”:“波斯尼亚和黑塞哥维那”}我建议您打印所有国家的JSON。它会给你一个想法,你的“模拟国家”有什么问题吗?