Solución:
El valor por defecto Locale
se construye estáticamente en tiempo de ejecución para su proceso de aplicación desde la configuración de propiedades del sistema, por lo que representará el Locale
seleccionado en ese dispositivo cuando se lanzó la aplicación. Normalmente, esto está bien, pero significa que si el usuario cambia su Locale
en la configuración después de que se ejecute el proceso de solicitud, el valor de getDefaultLocale()
probablemente no se actualizará de inmediato.
Si necesita atrapar eventos como este por algún motivo en su aplicación, puede intentar obtener el Locale
disponible en el recurso Configuration
objeto, es decir
Locale current = getResources().getConfiguration().locale;
Puede encontrar que este valor se actualiza más rápidamente después de un cambio de configuración si es necesario para su aplicación.
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;
}
}
Si está utilizando la biblioteca de soporte de Android, puede utilizar ConfigurationCompat
en lugar del método de @ Makalele para deshacerse de las advertencias de desaprobación:
Locale current = ConfigurationCompat.getLocales(getResources().getConfiguration()).get(0);
o en Kotlin:
val currentLocale = ConfigurationCompat.getLocales(resources.configuration)[0]