获得用户所在国家的可靠方法?

Ixx*_*Ixx 20 android locale setting

我通常从设备的语言中获取国家/地区.它有效,但现在我必须承认巴西.而且大多数设备只有葡萄牙语(pt_PT),没有葡萄牙语(巴西)选项.

我查了一下这个帖子:我在哪里? - 获得国家

方法

 String locale = context.getResources().getConfiguration().locale.getCountry();

 String locale = context.getResources().getConfiguration().locale.getDisplayCountry();
Run Code Online (Sandbox Code Playgroud)

仍然是语言,没有帮助.

还有sim卡的建议,但我不确定这是否可靠(所有的SIM卡都有这个独特的标识吗?),它也不是我需要的,因为用户无法改变它(如果是设置就是这种情况),它将排除使用没有SIM卡的设备的用户(可能他们只是使用WLAN).

还有地理位置建议,但这可能不适用于已停用它的设备.还是我错了?

如果没有别的帮助我会在我的应用程序中进行对话或菜单设置,以便用户可以在那里选择它.但我首先要确认该设备是否有可靠的可能性.

Eri*_*ric 33

您可以从电话网络中提取位置:

TelephonyManager.getNetworkCountryIso()
Run Code Online (Sandbox Code Playgroud)

或者从SIM卡:

TelephonyManager.getSimCountryIso()
Run Code Online (Sandbox Code Playgroud)

或者,如果您拥有用户的电话号码,则可以通过此数据将其与国家/地区匹配.

理想情况下,您可以使用所有这三个(按某种顺序,可能是SIM,Phone#,然后是网络),如果没有,则使用反向地理位置作为最后的手段.


t0m*_*13b 7

试试这个:

 TelephonyManager teleMgr = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
 if (teleMgr != null){
     countryISOCode = teleMgr.getSimCountryIso();
 }
Run Code Online (Sandbox Code Playgroud)

现在,countryISOCode根据此Wikipedia 条目,将包含以下类似于ISO 3166国家/地区代码的内容之一.

  • 如果SIM卡是在西班牙购买的,它将具有西班牙国家代码,同样如果在英国购买SIM卡,它将具有英国代码. (2认同)