我的手机(和某些应用程序)如何知道要添加到联系人号码中的国家/地区代码前缀(例如+ 1,+ 505,+ 49 ...)

最近我很惊讶,Android似乎没有一种标准方法来获取您自己手机的国家/地区代码(我的意思是+ 1,+ 49,+ 39而不是US,GE,IT)。 TelephonyManager可以让您获得许多其他信息,包括电话的两个字母字符串的国家/地区代码(IN,US,IT ...),甚至您的SIM卡,但不包括拨号前缀。

在广泛研究了这个问题之后,我发现人们已经通过创建自己的country_code-prefix对应关系数据库(即{IT,+ 39} ...)(请参阅this)解决了这一问题,这听起来很疯狂(而且感觉就像在用两根棍子摩擦在一起以制造XD火焰),这意味着无数开发人员正在编写自己的数据库,以解决TelephonyManager应该解决的问题。

我觉得有些系统应用似乎从某个地方知道此代码很奇怪。例如,即使我保存了不带前缀的电话号码,whatsapp通常也可以推断出正确的前缀。

我的联系人应用程序使用什么方法来推断正确的前缀?它有自己的私有数据库,不会与我们共享吗?是否有原因,例如一些我不知道的安全问题? Whatsapp如何做到?

对此我真的很感兴趣。也许我已经在Google上搜索了足够多的内容,并且那里有方法,但是很多人似乎正在使用上述数据库方法来解决它。

任何有助于理解这一点的人将不胜感激

a85935935 回答:我的手机(和某些应用程序)如何知道要添加到联系人号码中的国家/地区代码前缀(例如+ 1,+ 505,+ 49 ...)

Google的libphonenumber库支持此功能,请参见https://github.com/google/libphonenumber/blob/master/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java#L2373

基本上,您将执行以下操作:

// get region,e.g. "US"
TelephonyManager telephony = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
String region = telephony.getNetworkCountryIso().toUpperCase(Locale.getDefault());

// get country code from region,e.g. "US" => 1
PhoneNumberUtil libphone = PhoneNumberUtil.createInstance(this);
int code = libphone.getCountryCodeForRegion(region);
本文链接:https://www.f2er.com/2599992.html

大家都在问