获取当前的国家名称

时间:2016-08-01 20:56:44

标签: java android iso telephonymanager

我正在尝试获取手机所在的国家/地区名称。例如,如果用户在德国,则必须说德国。我已经尝试了几件事来实现这一点,但我还没有找到任何合适的解决方案。我知道我可以使用TelephonyManager,但这会给我ISO,我想要这个国家的名字。我也试过这个getApplicationContext().getResources().getConfiguration().locale.getDisplayCountry();,但即使我不在那里,这总是给我“美国”。我知道这是可能的,因为我在另一个应用程序中看到过它。我应该以某种方式使用ISO来实现我的目标,还是有更聪明/更简单的方式?

请不要将这篇文章投票重复,因为我已经在Stackoverflow上搜索了这个帖子,但是没有任何解决方案可以获得该国家的名称:)

1 个答案:

答案 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;
}