2016-02-09 2 views
0

В моем Application, я использую Payment Gateway. На основании User Country я должен изменить Payment method type. Используя Locale, я могу получить Страну, но она дает Device Configured/Manufactured стране, которая не полезна для меня. Так что я пытаюсь Google Play Services (Location Services). Как я могу получить только Country name с помощью этого API. Я не хочу Широта Долгота и т. Д. СпасибоКак получить название страны с помощью служб местоположения в Android?

+1

Если все, что вам нужно, это страна пользователь, почему бы не получить страну текущей SIM-карты? – OBX

+0

это один возможный опция. Если пользователь использует планшет Как я могу получить? – Moses

ответ

0

Для этого вы можете использовать Google Current Place Api.

PendingResult<PlaceLikelihoodBuffer> result = Places.PlaceDetectionApi 
    .getCurrentPlace(mGoogleApiClient, null); 
result.setResultCallback(new ResultCallback<PlaceLikelihoodBuffer>() { 
    @Override 
    public void onResult(PlaceLikelihoodBuffer likelyPlaces) { 
    for (PlaceLikelihood placeLikelihood : likelyPlaces) { 
     Log.i(TAG, String.format("Place '%s' has likelihood: %g", 
     placeLikelihood.getPlace().getName(), 
     placeLikelihood.getLikelihood())); 
    } 

    likelyPlaces.release(); 
    } 
}); 
+0

Спасибо за предложение. Позвольте мне попробовать ваш Кодекс. Любые разрешения на добавление? – Moses

+0

Этот API может оказаться нецелесообразным, поскольку он принимает только 1000 запросов в день. – Moses

3

Если устройство является телефоном, вы можете получить страну таким образом.

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

, а затем, может получить доступ к нему:

Locale loc = new Locale("", getUserCountry(this)); 

TextView.setText(loc.getDisplayCountry()); 

PS: вам нужно добавить разрешение:

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

+0

Спасибо За этот код. Позвольте мне попробовать .. Нужно ли добавлять Любые разрешения для этого. – Moses

+0

см. Отредактированный ответ :) – OBX

+0

это работает? .... – OBX

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