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]