我正在联系所有电话号码。然后我使用PhoneUtil.parse()方法检查所有数字以获取数字类型。但是,如果电话号码未使用国家/地区代码保存,则会出现异常。例如,电话号码就像9876512343 or 09876512343
一个印度号码。对于这个数字,我正在解析异常。如果我这样做
PhoneNumber numberProto = phoneUtil.parse(phoneNumber, "IN");
那么这个号码不是问题。但我怎么知道这个数字是一个印度数字,所以我可以在那个论点中传递IN。因此,如果我能获得给定电话号码(String)的国家代码,那么它可以解决我的问题。
答案 0 :(得分:7)
这是我的工作代码:
TelephonyManager tm = (TelephonyManager) getApplicationContext()
.getSystemService(Context.TELEPHONY_SERVICE);
String phNo = tm.getLine1Number();
String country = tm.getSimCountryIso();
Log.d("PhoneNumber :", phNo);
Log.d("country :", country);
在AndroidManifest.xml中添加以下行
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
答案 1 :(得分:0)
这里有不错的图书馆,以防您不喜欢 READ_PHONE_STATE。
implementation 'io.michaelrocks:libphonenumber-android:8.12.13'
链接到 github 上的父 C++ 库。
并在此处发布以快速入门。 Android. How to detect a country code by the phone number
代码示例如下:
String NumberStr = user.getPhone();
PhoneNumberUtil phoneUtil = PhoneNumberUtil.createInstance(this.getContext());;
try {
Phonenumber.PhoneNumber NumberProto = phoneUtil.parse(NumberStr, null);
if (!phoneUtil.isValidNumber(NumberProto)) {
showError(getResources().getString(R.string.wrong_phone_number));
return;
}
String regionISO = phoneUtil.getRegionCodeForCountryCode(NumberProto.getCountryCode());
} catch (NumberParseException e) {
showError(e.toString());
return;
}