Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓-确定用户所在国家最可靠的方法是什么_Android - Fatal编程技术网

Android 安卓-确定用户所在国家最可靠的方法是什么

Android 安卓-确定用户所在国家最可靠的方法是什么,android,Android,我目前正在考虑这样做: TelephonyManager teleMgr = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); if (teleMgr != null) { String countryISOCode = teleMgr.getSimCountryIso(); ... 但我不知道是否所有国家都遵守这一规定和getSimCountryIso();该功能适

我目前正在考虑这样做:

    TelephonyManager teleMgr = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
    if (teleMgr != null)
    {
       String countryISOCode = teleMgr.getSimCountryIso();
       ...
但我不知道是否所有国家都遵守这一规定和getSimCountryIso();该功能适用于所有手机。这是100%还是99%…还是另一种判断用户来自何处的方法更可靠


谢谢

最准确的方法是首先获取
LocationManager
。然后,调用
LocationManager.getLastKnownPosition
。然后,创建一个地理编码器并调用
GeoCoder.getFromLocation
。这样做是一个单独的线程!!这将为您提供
地址
对象的列表。调用
Address.getCountryName
就可以了

请记住,最后一个已知的位置可能有点过时,因此如果用户刚刚越过边界,您可能暂时不知道它

如果用户正在进行国际漫游,您当前使用的SIM卡方法将返回不正确的国家/地区

另一种方法是使用用户区域设置:

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

然而,这将根据语言偏好返回一个国家,对于Android中没有区域设置的地方来说并不准确(例如,瑞士的用户可能将语言设置为德语或法语,从而导致国家不正确。

最准确的方法是首先获取
LocationManager
。然后,调用
LocationManager.getLastKnownPosition
。然后,创建地理编码器并调用
GeoCoder.getFromLocation
.Do这是一个单独的线程!!这将给你一个
地址
对象的列表。调用
地址.getCountryName
你就知道了

请记住,最后一个已知的位置可能有点过时,因此如果用户刚刚越过边界,您可能暂时不知道它

如果用户正在进行国际漫游,您当前使用的SIM卡方法将返回不正确的国家/地区

另一种方法是使用用户区域设置:

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

然而,这将根据语言偏好返回一个国家,对于Android中没有区域设置的地方来说并不准确(例如,瑞士的用户可能将语言设置为德语或法语,从而导致国家/地区不正确。

谢谢-我同意国际漫游不正确。我只是担心如果此人在他们的国家/地区,我发布的方法是否可靠。或者许多人是否可能没有该字段。)t set?我99%确定每个SIM卡都会设置该字段。但是,如果未设置该字段,
TelephonyManager.getNetworkCountryIso()
在用户连接到网络时肯定会工作,并且可以用作备用。谢谢:)这非常有帮助。谢谢-我同意国际漫游不正确。我只是担心如果此人在他们的国家,我发布的方法是否可靠。或者许多人可能没有设置该字段?我99%肯定每个SIM卡都会设置该字段。但是,如果没有设置,
TelephonyManager.getNetworkCountryIso()
如果用户连接到网络,肯定会起作用,并且可以用作备用。谢谢:)这非常有用。如果用户不在他的国家怎么办?如果用户不在他的国家怎么办?