在 Android 中获取错误的移动前缀
Getting the Wrong Mobile Prefix in Android
我正在制作一个应用程序,我将从 sim 卡中获取用户的完整 phone 号码 - 包括国家和手机前缀。我的 phone 号码是 061555555,所以当我将它保存到服务器时,它应该如下所示:+38761555555。
这是我的问题 - 当我使用下面的代码时,我得到以下信息:+387218900032555555,即。 不是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;
}
我认为您正在解析 "national_number" 而不是 "country_code"。检查您的JSON 解析代码字段逻辑
{
"country_code": 41,
"national_number": 446681800
}
我检查了我的设置->状态,发现我的 phone 号码是未知的,它显示的不是我的 phone 号码而是 IMEI,所以我想我会让用户确认他的 phone 手动输入号码。
我正在制作一个应用程序,我将从 sim 卡中获取用户的完整 phone 号码 - 包括国家和手机前缀。我的 phone 号码是 061555555,所以当我将它保存到服务器时,它应该如下所示:+38761555555。
这是我的问题 - 当我使用下面的代码时,我得到以下信息:+387218900032555555,即。 不是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;
}
我认为您正在解析 "national_number" 而不是 "country_code"。检查您的JSON 解析代码字段逻辑
{
"country_code": 41,
"national_number": 446681800
}
我检查了我的设置->状态,发现我的 phone 号码是未知的,它显示的不是我的 phone 号码而是 IMEI,所以我想我会让用户确认他的 phone 手动输入号码。