secretos privado para paises llamar desde como codigos ciudades celulares celular android locale

android - privado - codigos secretos para celulares



¿Cómo puedo obtener el código de país de mi dispositivo Android sin usar el GPS? (6)

Creé una función de utilidad (probé una vez en un dispositivo en el que obtenía un código de país incorrecto en función de la configuración regional). Espero que ayudes. Referencia : https://github.com/hbb20/CountryCodePickerProject/blob/master/ccp/src/main/java/com/hbb20/CountryCodePicker.java#L1965

fun getDetectedCountry(context: Context, defaultCountryIsoCode: String): String { detectSIMCountry(context)?.let { return it } detectNetworkCountry(context)?.let { return it } detectLocaleCountry(context)?.let { return it } return defaultCountryIsoCode } private fun detectSIMCountry(context: Context): String? { try { val telephonyManager = context.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager Log.d(TAG, "detectSIMCountry: ${telephonyManager.simCountryIso}") return telephonyManager.simCountryIso } catch (e: Exception) { e.printStackTrace() } return null } private fun detectNetworkCountry(context: Context): String? { try { val telephonyManager = context.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager Log.d(TAG, "detectNetworkCountry: ${telephonyManager.simCountryIso}") return telephonyManager.networkCountryIso } catch (e: Exception) { e.printStackTrace() } return null } private fun detectLocaleCountry(context: Context): String? { try { val localeCountryISO = context.getResources().getConfiguration().locale.getCountry() Log.d(TAG, "detectNetworkCountry: $localeCountryISO") return localeCountryISO } catch (e: Exception) { e.printStackTrace() } return null }

Un móvil Android realmente sabe bastante bien dónde está, pero, ¿hay alguna forma de recuperar el país mediante un código de país o un nombre de país?

No es necesario conocer la posición exacta del GPS, el código de país o el nombre son suficientes, y estoy usando el código para esto:

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

pero me da el código "EE. UU."
pero mi dispositivo se mantuvo en la India; ¿Hay alguna forma de encontrar el código de país actual del dispositivo sin usar el GPS o el proveedor de red? porque estoy usando Tablet. Gracias por adelantado.


La respuesta marcada tiene un código obsoleto. Necesitas implementar esto:

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


No debe pasar nada a getCountry() , eliminar Locale.getDefault()

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


No estoy seguro si todavía se busca una solución, pero aquí está mi:

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


Simplemente puede usar este código,

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

Esto devolverá ''US'' si su red conectada actual es Estados Unidos. Esto funciona sin tarjeta SIM, incluso. Espero que esto resuelva su problema.


Use este enlace http://ip-api.com/json , esto proporcionará toda la información como json. Desde este momento, puedes obtener el país fácilmente. Este sitio funciona usando su IP actual, detecta automáticamente los detalles de IP y de envío.

Docs http://ip-api.com/docs/api:json Espero que ayude.

Esto es lo que conseguí.

{ "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": "" }

NB: como se trata de una API de terceros, no la use como solución principal. Y tampoco estoy seguro si es gratis o no.