Android obtiene la configuración regional actual, no predeterminada

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

Puedo obtener el predeterminado, pero puede que este no sea el correcto?

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

La configuración Locale predeterminada se construye estáticamente en el tiempo de ejecución para su proceso de aplicación desde la configuración de propiedades del sistema, por lo que representará la configuración Locale seleccionada en ese dispositivo cuando se lanzó la aplicación . Normalmente, esto está bien, pero significa que si el usuario cambia su configuración Locale en la configuración después de que se esté ejecutando su proceso de aplicación, el valor de getDefaultLocale() probablemente no se actualice inmediatamente.

Si necesita atrapar eventos como este por algún motivo 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; 

Puede encontrar que este valor se actualiza más rápidamente después de que una configuración cambie si eso 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; } } 

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 apropiada para tareas que implican presentar datos al usuario.

Parece que deberías usarlo.

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

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

o en Kotlin:

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