La clase de dirección getCountryCode () devuelve dígitos

public static Country getCountryFromLocation(Context cxt, List<Country> countryList, Location location, int maxAddress) { if (location == null || countryList == null || countryList.isEmpty()) { Log.d("ooo", "location == null || countryList == null || countryList.isEmpty()"); return null; } double longitude = location.getLongitude(); double latitude = location.getLatitude(); Geocoder coder = new Geocoder(cxt); try { List<Address> addressList = coder.getFromLocation(latitude, longitude, maxAddress); for (Address address : addressList) { String curCountryCode = address.getCountryCode(); Log.d("ooo", "address " + address.toString()); if (TextUtils.isEmpty(curCountryCode)) { continue; } for (Country country : countryList) { if (country.countryCode.equals(curCountryCode)) { return country; } } } } catch (IOException e) { e.printStackTrace(); } return null; } 

Estoy tratando de escribir una función que tendrá la longitud y la latitud para obtener el código de país que se basa en la norma ISO 3166-2. De acuerdo con la descripción del método en la clase de Address :

 /** * Returns the country code of the address, for example "US", * or null if it is unknown. */ public String getCountryCode() { return mCountryCode; } 

Debo obtener CN basado en la longitud y la latitud, pero obtengo salida de direcciones como esta:

  D/ooo: address Address[addressLines=[0:"河南省许昌市鄢陵县",1:"刘桥村"],feature=null,admin=河南省,sub-admin=null,locality=许昌市,thoroughfare=,postalCode=null,countryCode=155,countryName=中国,hasLatitude=true,latitude=34.16667716 

155 es lo que obtengo por código de país, por favor, hágamelo saber lo que debo hacer para obtener el código de país de la longitud y la latitud. Además, cuando utilizo GeoCoder, se devuelve diferentes números de 3 dígitos, incluso las longitudes de pensamiento de entrada y las latitudes están dentro del mismo país, en mi caso, es China. 155 para una provincia, y 131 para otra provincia china. ¿Podría explicar qué representan estos números? Estoy seguro de que no es el código del país …

Hay muchas maneras de getCountry Code en Android.

1. Desde la configuración de configuración regional.

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

Devolverá la base de código de país en la que ha configurado el usuario de configuración regional en el dispositivo. Ex. Estoy en India y mi dispositivo está configurado en Locale English (United States) luego volverá a US

2. Desde TelephonyManager

 TelephonyManager manager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); String CountryID= manager.getSimCountryIso().toUpperCase(); 

3. Desde latitud / longitud utilizando GeoCode

 Geocoder geoCoder = new Geocoder(mActivity); List<Address> addresses = geoCoder.getFromLocation(latitude, longitude, 1); if (addresses.size() > 0) { String CountryID= addresses.get(0).getCountryCode(); } 

NOTA: Todo el método devolverá el código del país en 2 letras como US (USA), IN (INDIA) .. etc

Obtenga el código del país en el dígito de la letra.

array.xml

 <string-array name="CountryCodes" > <item>93,AF</item> <item>355,AL</item> <item>213,DZ</item> <item>376,AD</item> <item>244,AO</item> <item>672,AQ</item> <item>54,AR</item> <item>374,AM</item> <item>297,AW</item> <item>61,AU</item> <item>43,AT</item> <item>994,AZ</item> <item>973,BH</item> <item>880,BD</item> <item>375,BY</item> <item>32,BE</item> <item>501,BZ</item> <item>229,BJ</item> <item>975,BT</item> <item>591,BO</item> <item>387,BA</item> <item>267,BW</item> <item>55,BR</item> <item>673,BN</item> <item>359,BG</item> <item>226,BF</item> <item>95,MM</item> <item>257,BI</item> <item>855,KH</item> <item>237,CM</item> <item>1,CA</item> <item>238,CV</item> <item>236,CF</item> <item>235,TD</item> <item>56,CL</item> <item>86,CN</item> <item>61,CX</item> <item>61,CC</item> <item>57,CO</item> <item>269,KM</item> <item>242,CG</item> <item>243,CD</item> <item>682,CK</item> <item>506,CR</item> <item>385,HR</item> <item>53,CU</item> <item>357,CY</item> <item>420,CZ</item> <item>45,DK</item> <item>253,DJ</item> <item>670,TL</item> <item>593,EC</item> <item>20,EG</item> <item>503,SV</item> <item>240,GQ</item> <item>291,ER</item> <item>372,EE</item> <item>251,ET</item> <item>500,FK</item> <item>298,FO</item> <item>679,FJ</item> <item>358,FI</item> <item>33,FR</item> <item>689,PF</item> <item>241,GA</item> <item>220,GM</item> <item>995,GE</item> <item>49,DE</item> <item>233,GH</item> <item>350,GI</item> <item>30,GR</item> <item>299,GL</item> <item>502,GT</item> <item>224,GN</item> <item>245,GW</item> <item>592,GY</item> <item>509,HT</item> <item>504,HN</item> <item>852,HK</item> <item>36,HU</item> <item>91,IN</item> <item>62,ID</item> <item>98,IR</item> <item>964,IQ</item> <item>353,IE</item> <item>44,IM</item> <item>972,IL</item> <item>39,IT</item> <item>225,CI</item> <item>81,JP</item> <item>962,JO</item> <item>7,KZ</item> <item>254,KE</item> <item>686,KI</item> <item>965,KW</item> <item>996,KG</item> <item>856,LA</item> <item>371,LV</item> <item>961,LB</item> <item>266,LS</item> <item>231,LR</item> <item>218,LY</item> <item>423,LI</item> <item>370,LT</item> <item>352,LU</item> <item>853,MO</item> <item>389,MK</item> <item>261,MG</item> <item>265,MW</item> <item>60,MY</item> <item>960,MV</item> <item>223,ML</item> <item>356,MT</item> <item>692,MH</item> <item>222,MR</item> <item>230,MU</item> <item>262,YT</item> <item>52,MX</item> <item>691,FM</item> <item>373,MD</item> <item>377,MC</item> <item>976,MN</item> <item>382,ME</item> <item>212,MA</item> <item>258,MZ</item> <item>264,NA</item> <item>674,NR</item> <item>977,NP</item> <item>31,NL</item> <item>599,AN</item> <item>687,NC</item> <item>64,NZ</item> <item>505,NI</item> <item>227,NE</item> <item>234,NG</item> <item>683,NU</item> <item>850,KP</item> <item>47,NO</item> <item>968,OM</item> <item>92,PK</item> <item>680,PW</item> <item>507,PA</item> <item>675,PG</item> <item>595,PY</item> <item>51,PE</item> <item>63,PH</item> <item>870,PN</item> <item>48,PL</item> <item>351,PT</item> <item>1,PR</item> <item>974,QA</item> <item>40,RO</item> <item>7,RU</item> <item>250,RW</item> <item>590,BL</item> <item>685,WS</item> <item>378,SM</item> <item>239,ST</item> <item>966,SA</item> <item>221,SN</item> <item>381,RS</item> <item>248,SC</item> <item>232,SL</item> <item>65,SG</item> <item>421,SK</item> <item>386,SI</item> <item>677,SB</item> <item>252,SO</item> <item>27,ZA</item> <item>82,KR</item> <item>34,ES</item> <item>94,LK</item> <item>290,SH</item> <item>508,PM</item> <item>249,SD</item> <item>597,SR</item> <item>268,SZ</item> <item>46,SE</item> <item>41,CH</item> <item>963,SY</item> <item>886,TW</item> <item>992,TJ</item> <item>255,TZ</item> <item>66,TH</item> <item>228,TG</item> <item>690,TK</item> <item>676,TO</item> <item>216,TN</item> <item>90,TR</item> <item>993,TM</item> <item>688,TV</item> <item>971,AE</item> <item>256,UG</item> <item>44,GB</item> <item>380,UA</item> <item>598,UY</item> <item>1,US</item> <item>998,UZ</item> <item>678,VU</item> <item>39,VA</item> <item>58,VE</item> <item>84,VN</item> <item>681,WF</item> <item>967,YE</item> <item>260,ZM</item> <item>263,ZW</item> </string-array> 

Cómo utilizar esta matriz.

 String CountryZipCode=""; String[] rl= getResources().getStringArray(R.array.CountryCodes); for(int i=0;i<rl.length;i++){ String[] g=rl[i].split(","); if(g[1].trim().equals(CountryID.trim())){ CountryZipCode=g[0]; break; } } 

NOTA: También puede modificar el código anterior para obtener el código de país en la letra de dígito.

Prueba esto

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

Otra opción sería utilizar la clase TelephonyManager como se especifica en este subproceso . Gracias a @Rawkode.

Puede utilizar el servicio web de Geocoding API como alternativa a la clase nativa de Geocoder. El servicio web tiene una funcionalidad de geocodificación inversa:

https://developers.google.com/maps/documentation/geocoding/intro?hl=en#ReverseGeocoding

Así que puede especificar la latitud, longitud y un tipo de resultado (país) que desea recuperar.

En su caso, debe ser algo similar a:

.

En Android puedes usar la clase AndroidHttpClient para ejecutar la solicitud HTTP:

https://developer.android.com/reference/android/net/http/AndroidHttpClient.html

El resultado JSON para la solicitud HTTP mencionada anteriormente es

 { "results":[ { "address_components":[ { "long_name":"China", "short_name":"CN", "types":[ "country","political" ] } ], "formatted_address":"China", "geometry":{ "bounds":{ "northeast":{ "lat":53.5587016,"lng":134.7728099 }, "southwest":{ "lat":18.1576156,"lng":73.4994136 } }, "location":{ "lat":35.86166,"lng":104.195397 }, "location_type":"APPROXIMATE", "viewport":{ "northeast":{ "lat":53.558106,"lng":134.7728099 }, "southwest":{ "lat":18.1576156,"lng":73.4994136 } } }, "place_id":"ChIJwULG5WSOUDERbzafNHyqHZU", "types":[ "country","political" ] } ], "status":"OK" } 

Por lo tanto, puede obtener el código ISO 3166-2 del campo de nombres abreviados de los componentes de dirección.

 public String getCountryCode() { return mCountryCode; } 

Básicamente, este método es responsable de devolver el código ISO alfa / numérico del país.

Por ejemplo: En el caso de China se devolverá 86 que es en realidad un prefijo de marcación o código numérico ISO.

sin embargo, el documento dice …

 /** * Returns the country code of the address, for example "US", * or null if it is unknown. */ 

Aquí:

"US" = código ISO Alfa-2,
"CHN" = código ISO Alfa-3,
155 = ISO Código numérico / prefijo de marcación

 Country ISO code Or Country Dial code/prefix = country code // this conflicts us 

Sin embargo, mCountryCode es responsable de devolver el código ISO alfa y numérico basado en su función utilizada en la clase Address .

Ahora, de acuerdo con tu mensaje de depuración:

  D/ooo: address Address[addressLines=[0:"河南省许昌市鄢陵县",1:"刘桥村"],feature=null,admin=河南省,sub-admin=null,locality=许昌市,thoroughfare=,postalCode=null,countryCode=155,countryName=中国,hasLatitude=true,latitude=34.16667716 

Tienes countryCode=155 que es en realidad un prefijo de prefijo de área de telefonía móvil en China y cambiará cuando cambies la ubicación. Por eso tienes 155 y 131 para diferentes provincias. Ver la Wiki

Si espera que el código ISO como "US" o "CHN" como cadena de salida, puede utilizar esta línea:

 address.getLocale().getISO3Country(); 

En el caso de la salida numérica, obtendrá diferentes códigos que son sólo prefijo de marcado en función del área.

Referencia: lista de códigos de país

String locale = context.getResources (). GetConfiguration (). Locale.getCountry ();

  • Compartir la imagen estática de google map a través de la aplicación android
  • La etiqueta de meta-datos no tiene valor correcto
  • Cómo agregar KmlLayer a M4B Google Map para empresas?
  • Clip o quitar una parte de la polilínea google maps v2
  • Poner a los marcadores de Google Map al frente cambiando el índice Z en Android
  • Strange ArrayIndexOutOfBoundsException en algunos dispositivos al dibujar polilíneas
  • Botón onclicklistener en infowindow en google map
  • Obtención de la clave de la API de Google Maps
  • Android: Proporcionar autosugestión automática en android coloca Api?
  • Android MapView se superpone a DrawerLayout
  • Dibujo de la ruta del autobús al mapa de Google
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.