2012-07-02 17 views
28

Un cellulare Android in realtà sa abbastanza bene dove si trova - ma esiste un modo per recuperare il Paese in base a un codice di paese o al nome di un paese?Come posso ottenere il mio codice paese del dispositivo Android senza utilizzare il GPS?

Non c'è bisogno di conoscere l'esatta posizione GPS - il codice del paese o il nome è sufficiente, e sto usando il codice per questo:

String locale = context.getResources().getConfiguration().locale.getCountry(Locale.getDefault());  
System.out.println("country = "+locale); 

ma mi dà il codice "US"
ma il mio dispositivo tenuto in india; c'è un modo per trovare il codice del paese attuale del dispositivo senza utilizzare il GPS o il provider di rete. perché sto usando Tablet. Grazie in anticipo.

risposta

45

Non si dovrebbe essere di passaggio per nulla in getCountry(), rimuovere Locale.getDefault()

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

+37

Ciò restituirà il Paese delle Impostazioni internazionali che l'utente ha configurato. Se l'utente configura il dispositivo per l'India e poi lo prende su un aereo per la Germania, riceverai comunque il prefisso internazionale per l'India. Ho solo pensato di chiarirlo. –

+0

grazie Rawkode e David per la tua rapida risposta .. in realtà ho già utilizzato getCountry() ma mostra ancora "US" ma come dice David sulla configurazione del dispositivo, quindi dimmi come posso configurare il mio dispositivo ho cercato in impostazioni, ma non potevo 'trovo .. :( –

+1

Io vivo in Belgio e il mio dispositivo è in inglese/USA, non sono sicuro che questo codice darà al paese ;-) –

-1

Non sono sicuro se una soluzione è ancora ricercato, ma qui è la mia:

 private void getCountryCode(final Location location) { 
    Helper.log(TAG, "getCountryCode"); 

    AsyncTask<Void, Void, String> countryCodeTask = new AsyncTask<Void, Void, String>() { 

     final float latitude = (float) location.getLatitude(); 
     final float longitude = (float) location.getLongitude(); 
     // Helper.log(TAG, "latitude: " +latitude); 
     List<Address> addresses = null; 
     Geocoder gcd = new Geocoder(mContext); 
     String code = null; 

     @Override 
     protected String doInBackground(Void... params) { 
      try { 
       addresses = gcd.getFromLocation(latitude, longitude, 1); 
       code = addresses.get(0).getCountryCode(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      return code; 
     } 

     @Override 
     protected void onPostExecute(String code) { 
      Helper.log(TAG, "onPostExecute"); 
      mCountryCodeListener.returnCountryCode(code); 
     } 

    }; 
    if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.GINGERBREAD_MR1) { 
     countryCodeTask.execute(); 
    } else { 
     countryCodeTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); 
    } 
} 
44

si può semplicemente utilizzare questo codice,

TelephonyManager tm = (TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE); 
String countryCodeValue = tm.getNetworkCountryIso(); 

Ciò restituirà "Stati Uniti" se la rete corrente in uso è Stati Uniti. Funziona anche senza SIM. Spero che questo risolva il tuo problema.

+0

Buona risposta. Sembra essere più affidabile di ciò che è impostato nella configurazione –

+4

Non funziona in Nexus 5 senza SIM! –

+0

Il telefono dovrebbe avere qualche fonte di connessione. WiFi acceso? – Kishath

33

Utilizzare questo collegamento http://ip-api.com/json, questo fornirà tutte le informazioni come json. Da questo json puoi ottenere facilmente il paese. Questo sito funziona utilizzando l'IP corrente, rileva automaticamente i dettagli IP e di invio.

Documenti http://ip-api.com/docs/api:json Spero che sia d'aiuto.

Questo è quello che ho ottenuto.

{ 
"as": "AS55410 C48 Okhla Industrial Estate, New Delhi-110020", 
"city": "Kochi", 
"country": "India", 
"countryCode": "IN", 
"isp": "Vodafone India", 
"lat": 9.9667, 
"lon": 76.2333, 
"org": "Vodafone India", 
"query": "123.63.81.162", 
"region": "KL", 
"regionName": "Kerala", 
"status": "success", 
"timezone": "Asia/Kolkata", 
"zip": "" 
} 

N.B. - Poiché si tratta di un'API di terze parti, non utilizzare come soluzione principale. E anche non sono sicuro se è gratis o no.

+0

come usarlo nel codice Android? –

+0

@KhizarHayat utilizzando una semplice call aattiva restfull –

6

La risposta selezionata ha codice deprecato. È necessario implementare questo:

String locale; 
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { 
    locale = context.getResources().getConfiguration().getLocales().get(0).getCountry(); 
} else { 
    locale = context.getResources().getConfiguration().locale.getCountry(); 
} 
Problemi correlati