142 votes

Où suis-je? - Obtenez des pays

Android mobile ne fait sait très bien où il en est - mais est-il un moyen de récupérer le pays par quelque chose comme un code de pays?

Pas besoin de savoir la position GPS le pays est suffisant

J'ai d'abord pensé à l'aide de la zone de temps, mais en fait j'ai besoin de plus d'informations que cela, car cela fait une différence si l'emplacement est de New York ou de Lima.

Le fond de la question: j'ai une application qui utilise les valeurs de température, et j'aimerais définir la valeur par défaut de l'unité, soit en degrés Celsius ou Fahrenheit, selon que l'emplacement est à NOUS ou à l'extérieur

150voto

Marco W. Points 2685
/**
 * 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;
}

105voto

stealthcopter Points 5412

Cette obtiendrez le code du pays:

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

peut également remplacer getCountry() avec getISO3Country() pour obtenir un 3 lettres du code ISO pour le pays. Cela permettra d'obtenir le nom du pays:

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

Cela semble plus facile que les autres méthodes et dépendent de la localisation des paramètres sur le téléphone, donc si l'un de NOUS de l'utilisateur est à l'étranger, ils ne sont certainement voulez Fahrenheit et cela va fonctionner :)

66voto

DonGru Points 6677

En fait, je viens de découvrir qu'il ya encore une autre façon d'obtenir un code de pays, à l'aide de la getSimCountryIso() la méthode de TelephoneManager:

TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
String countryCode = tm.getSimCountryIso();

Puisque c'est le sim code ne change pas lorsque vous voyagez dans d'autres pays.

41voto

EboMike Points 39257

Tout d'abord, obtenir la LocationManager. Alors, appelez - LocationManager.getLastKnownPosition. Ensuite, créez un Géocodeur et appelez - GeoCoder.getFromLocation. Faire ceci est un thread séparé!! Cela vous donnera une liste d' Address objets. Appelez Address.getCountryName et vous l'avez obtenu.

Gardez à l'esprit que la dernière position connue, peut être un peu fade, donc si l'utilisateur vient de franchir la frontière, vous ne pouvez pas savoir à ce sujet pendant un certain temps.

17voto

Dave Webb Points 90034

Vous pouvez utiliser getNetworkCountryIso() de TelephonyManager pour obtenir le pays le téléphone est actuellement (même si apparemment ce n'est pas fiable sur les réseaux CDMA).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X