android - studio - ¿Cómo obtener la configuración regional actual(nivel de API 24)?
string language android (3)
Yo estaba haciendo de esta manera:
context.getResources().getConfiguration().locale
Configuration.locale
está en desuso si el destino es 24. Así que hice este cambio:
context.getResources().getConfiguration().getLocales().get(0)
Ahora dice que es solo para minSdkVersion
24, así que no puedo usarlo porque mi objetivo mínimo es más bajo.
¿Cuál es el método correcto?
En Configuration.java
, hay:
/**
* ...
* @deprecated Do not set or read this directly. Use {@link #getLocales()} and
* {@link #setLocales(LocaleList)}. If only the primary locale is needed,
* <code>getLocales().get(0)</code> is now the preferred accessor.
*/
@Deprecated public Locale locale;
...
configOut.mLocaleList = LocaleList.forLanguageTags(localesStr);
configOut.locale = configOut.mLocaleList.get(0);
Básicamente, usar locale
básicamente devuelve la configuración regional principal que el usuario establece. La respuesta de aceptación hace exactamente lo mismo que leer la locale
directamente.
Sin embargo, esta configuración regional no es necesariamente la que se utiliza al obtener recursos. Puede ser la configuración regional secundaria del usuario si la configuración regional principal no está disponible.
Aquí hay una versión más correcta:
Resources resources = context.getResources();
Locale locale = Build.VERSION.SDK_INT >= Build.VERSION_CODES.N
? resources.getConfiguration().getLocales()
.getFirstMatch(resources.getAssets().getLocales())
: resources.getConfiguration().locale;
Podría usar Locale.getDefault()
, que es la forma estándar de Java de obtener la Locale
actual.
Verifique en qué versión se está ejecutando y retroceda a la solución obsoleta:
Locale locale;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
locale = context.getResources().getConfiguration().getLocales().get(0);
} else {
locale = context.getResources().getConfiguration().locale;
}