我目前正在做类似的事情:
TelephonyManager teleMgr = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
if (teleMgr != null)
{
String countryISOCode = teleMgr.getSimCountryIso();
...
但我不知道所有国家是否都遵守这个和getSimCountryIso();功能适用于所有手机。这是可靠的100%还是99%...或者是另一种告诉用户更可靠的方式?
谢谢!
答案 0 :(得分:4)
最准确的方法是首先获得LocationManager
。然后,致电LocationManager.getLastKnownPosition
。然后,创建一个GeoCoder并调用GeoCoder.getFromLocation
。这是一个单独的线程!!这将为您提供Address
个对象的列表。致电Address.getCountryName
,你就明白了。
请记住,最后一个已知位置可能有点陈旧,因此如果用户刚刚越过边界,您可能暂时不知道它。
如果用户使用国际漫游,您当前使用的SIM卡方法将返回错误的国家/地区。
另一种方法是使用用户区域设置:
String locale = context.getResources().getConfiguration().locale.getDisplayCountry();
但是,这将根据语言首选项返回一个国家/地区,并且对于Android中没有语言环境的地方不准确(例如,瑞士的用户可能将语言设置为德语或法语,导致国家不正确。