如何在Android中获取电话号码的国家代码?

时间:2014-12-05 07:32:37

标签: android

我正在联系所有电话号码。然后我使用PhoneUtil.parse()方法检查所有数字以获取数字类型。但是,如果电话号码未使用国家/地区代码保存,则会出现异常。例如,电话号码就像9876512343 or 09876512343一个印度号码。对于这个数字,我正在解析异常。如果我这样做

PhoneNumber numberProto = phoneUtil.parse(phoneNumber, "IN");

那么这个号码不是问题。但我怎么知道这个数字是一个印度数字,所以我可以在那个论点中传递IN。因此,如果我能获得给定电话号码(String)的国家代码,那么它可以解决我的问题。

2 个答案:

答案 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++ 库。

google/libphonenumber

并在此处发布以快速入门。 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;
    }