我正在尝试获取手机所在的国家/地区名称。例如,如果用户在德国,则必须说德国。我已经尝试了几件事来实现这一点,但我还没有找到任何合适的解决方案。我知道我可以使用TelephonyManager
,但这会给我ISO,我想要这个国家的名字。我也试过这个getApplicationContext().getResources().getConfiguration().locale.getDisplayCountry();
,但即使我不在那里,这总是给我“美国”。我知道这是可能的,因为我在另一个应用程序中看到过它。我应该以某种方式使用ISO来实现我的目标,还是有更聪明/更简单的方式?
请不要将这篇文章投票重复,因为我已经在Stackoverflow上搜索了这个帖子,但是没有任何解决方案可以获得该国家的名称:)
答案 0 :(得分:0)
Where am I? - Get country 给出了这段代码
/**
* Get ISO 3166-1 alpha-2 country code for this device (or null if not available)
* @param context Context reference to get the TelephonyManager instance from
* @return country code or null
*/
public static String getUserCountry(Context context) {
try {
final TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
final String simCountry = tm.getSimCountryIso();
if (simCountry != null && simCountry.length() == 2) { // SIM country code is available
return simCountry.toLowerCase(Locale.US);
}
else if (tm.getPhoneType() != TelephonyManager.PHONE_TYPE_CDMA) { // device is not 3G (would be unreliable)
String networkCountry = tm.getNetworkCountryIso();
if (networkCountry != null && networkCountry.length() == 2) { // network country code is available
return networkCountry.toLowerCase(Locale.US);
}
}
}
catch (Exception e) { }
return null;
}