studio spanish languages language idioma forlanguagetag configuracion colombia code chile cambiar android locale

spanish - Android obtiene la configuración regional actual, no predeterminada



locale forlanguagetag spanish (4)

¿Cómo obtengo la ubicación actual del usuario en Android?

Puedo obtener el predeterminado, pero este puede no ser el correcto, ¿verdad?

Básicamente quiero el código de idioma de dos letras de la ubicación actual. No es el predeterminado. No hay Locale.current()


Actualización de Android N (Api nivel 24) (sin advertencias):

Locale getCurrentLocale(Context context){ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){ return context.getResources().getConfiguration().getLocales().get(0); } else{ //noinspection deprecation return context.getResources().getConfiguration().locale; } }


De la documentación de getDefault :

Devuelve la configuración regional preferida del usuario. Esto puede haber sido anulado para este proceso con setDefault (Locale).

También de los documentos Locale :

La configuración regional predeterminada es adecuada para las tareas que implican presentar datos al usuario.

Parece que deberías usarlo.


La configuración Locale predeterminada se construye estáticamente en el tiempo de ejecución para su proceso de solicitud a partir de la configuración de propiedades del sistema, por lo que representará la configuración Locale seleccionada en ese dispositivo cuando se inició la aplicación . Por lo general, esto está bien, pero significa que si el usuario cambia su configuración Locale en la configuración después de que se ejecuta el proceso de la aplicación, el valor de getDefaultLocale() probablemente no se actualizará de inmediato.

Si necesita capturar eventos como este por alguna razón en su aplicación, puede intentar obtener la Configuration Locale disponible desde el objeto de Configuration del recurso, es decir

Locale current = getResources().getConfiguration().locale;

Es posible que este valor se actualice más rápidamente después de que cambie la configuración si es necesario para su aplicación.


Si está utilizando la biblioteca de soporte de Android, puede usar ConfigurationCompat lugar del método de @Makalele para deshacerse de las advertencias de privación:

Locale current = ConfigurationCompat.getLocales(getResources().getConfiguration()).get(0);

o en Kotlin:

val currentLocale = ConfigurationCompat.getLocales(resources.configuration)[0]