gpt4 book ai didi

android - 我的手机(和某些应用程序)如何知道将哪个国家/地区代码前缀(如 +1、+505、+49...)附加到我的联系人中的号码

转载 作者:行者123 更新时间:2023-12-04 10:22:01 27 4
gpt4 key购买 nike

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

在广泛搜索这个问题后,我发现人们通过创建自己的国家/地区代码前缀对应数据库(即 {IT,+39}...)(参见 this)解决了这个问题,这听起来很疯狂(感觉就像在摩擦两根棍子一起来点燃 XD),这意味着无数开发人员正在世界各地编写自己的数据库来解决问题 TelephonyManager应该解决。

我觉得有些系统应用程序似乎从某个地方知道此代码很奇怪。例如,即使我在没有前缀的情况下保存了他们的号码,我也能够从国外调用联系人,而且 whatsapp 通常也能够推断出正确的前缀。

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

我对此很感兴趣。也许我没有用谷歌搜索足够多的方法并且那里有方法,但很多人似乎正在使用上述数据库方法来解决它。

任何帮助理解这一点将不胜感激

最佳答案

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);

关于android - 我的手机(和某些应用程序)如何知道将哪个国家/地区代码前缀(如 +1、+505、+49...)附加到我的联系人中的号码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60807278/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com