如何获得国家(或其ISO代码)?

Vis*_*war 49 android location country-codes

获取国家/地区代码的最佳方式是什么?截至目前,我知道两种方法是通过TelephonyManager和另一种方法获取Locale,这是另一种在android中查找国家/地区代码的最佳和独特方式.

Sah*_* Mj 79

试试这个,

TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
      String countryCode = tm.getSimCountryIso();
Run Code Online (Sandbox Code Playgroud)

  • 这可能不适用于没有SIM卡的CDMA手机 (3认同)
  • 如果作为用户我使用没有SIM卡的手机怎么办? (3认同)
  • 将IP地址映射到国家/地区代码有点不确定(VPN怎么样?)并且听起来像很多工作.为什么不尝试电话,如果失败,请故障转移到`Locale.getDefault().getCounty()`? (3认同)

Jos*_*gia 33

关于这一点总是有很多讨论,我永远不会理解为什么开发人员和公司会采用复杂的方式.用户选择的语言表示他/她希望始终在他/她的电话中看到的语言.他们不打算使用与其他语言或系统不同的语言.

选择非常简单:使用Locale(获取用户选择的语言作为首选),或者尽量让他们小心翼翼地向他们展示他们已经说过他们不想看到的语言的信息.

要获取国家/地区代码,请执

Locale.getDefault().getCountry();
Run Code Online (Sandbox Code Playgroud)

  • 例如,在印度,没有可能选择印地语作为手机语言,因为它在android rom上不存在.印度的大多数人被迫选择其他语言,如英语(英国).在这种情况下,您的代码将会中断.此外,在一些国家,人们实际上选择用英语查看所有内容,因为本地化还有其他问题(主要是左翼语言).这是破坏您的代码的另一种情况. (28认同)
  • 我已经提出问题,我可以通过 Locale 获得它我想要另一种独特的方式获得它并发布我的答案 (2认同)
  • @JoseLUgia除了其他人提出的观点之外,只有在确定国家/地区的目的是用适当的语言本地化UI时,您的答案才有效.确定国家还有其他原因,例如许可.或者说,我有一个应用程序,可以让你在印度投资共同基金.我不在乎你喜欢什么语言,但如果你不在印度,我可能会警告你,该应用程序只允许你投资印度共同基金.因此,从现场确定的国家并不总是正确的. (2认同)

Asa*_*ssi 13

            TelephonyManager tm = (TelephonyManager)getSystemService(getApplicationContext().TELEPHONY_SERVICE);
          String countryCode = tm.getNetworkCountryIso();
Run Code Online (Sandbox Code Playgroud)

它比好getSimCountryIso,因为getSimCountryIso依赖于运营商烧在SIM国家ISO和它也支持CDMA网络.

  • 这是有效的,但如果用户使用的是仅限wifi的设备,那该怎么办?没有插入SIM卡?`Locale.getDefault().getCountry()`对于很多将默认语言设置为英语的人来说都不起作用.我可能在印度,我们通常将设备区域设置为en-GB,查询该国家现在返回GB. (2认同)

Bac*_* Vu 7

您可以使用此代码获取ISO2: Locale.getDefault().getCountry()

这要获得ISO3: Locale.getDefault().getISO3Country()

希望这可以帮助


Vis*_*war 6

我通过IP地址解决了它.您可以获取手机的IP地址.如果您正在使用wifi,那么它将是您的移动服务提供服务器的wifi热点或IP的IP地址,因此从该IP您可以发送到Web服务或跟踪该IP地址的国家/地区有一些来源(数据库)可用互联网这里提供IP国家的例子是http://whatismyipaddress.com/ip-lookup.

  • 有类似的 API:http://ip-api.com/json 我唯一关心的是使用在线 API 的可靠性如何。如果跌了怎么办? (2认同)

D4r*_*iNS 6

我认为ip是最好的方式,因为它会给你手机所在的国家,

如果你这样做的话

    Locale.getDefault().getCountry();,
Run Code Online (Sandbox Code Playgroud)

你有一个国家,用户选择国家,所以你可以选择英格兰,你可以在西班牙,也许你需要知道他在哪里的妈妈

示例:假设您的应用程序只能在英国购买,用户来自西班牙,但他正在英国度假,他想购买您的产品...如果您使用

    Locale.getDefault().getCountry(); 
Run Code Online (Sandbox Code Playgroud)

该用户将无法购买您的产品,所以ip是我认为最好的方式