2016-08-01 6 views
0

Я пытаюсь получить название страны, где находится телефон. Например, если пользователь находится в Германии, он должен сказать, что Германия. Я попробовал несколько вещей, чтобы это произошло, но я не нашел подходящего решения. Я знаю, что могу использовать TelephonyManager, но это даст мне ISO, и я хочу название страны. Я также пробовал это getApplicationContext().getResources().getConfiguration().locale.getDisplayCountry();, но это всегда дает мне «Соединенные Штаты», хотя меня там нет. Я знаю, что это возможно, поскольку я видел это в другом приложении. Должен ли я использовать ISO как-то для достижения того, что я, или есть более умный/более простой способ?Получение текущего названия страны

Пожалуйста, не голосуйте этот пост повторы, как я уже искал здесь на Stackoverflow, но не любое решение, чтобы получить название страны :)

+0

См. Http://stackoverflow.com/questions/3659809/where-am-i-get-country –

+0

Я уже видел этот пост, но есть ли название страны? Большинство решений - как получить ISO. –

+0

ISO - это относительно статический список, просто добавьте его в свое приложение и найдите полное имя. –

ответ

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; 
} 
+0

Хммм, разве это не слишком «глубоко»? Я хочу получить название страны. Не могу ли я использовать ISO для получения имени? 'getApplicationContext(). getResources(). getConfiguration(). locale.getDisplayCountry();' дал мне «Соединенные Штаты», я просто хочу, чтобы он работал правильно (если это возможно) –

+0

вы тестируете 'getApplicationContext(). getResources()) .getConfiguration(). locale.getDisplayCoun try(); 'на эмуляторе Android или на самом телефоне? –

+0

Пробовал оба –

 Смежные вопросы

  • Нет связанных вопросов^_^