¿Por qué Android tiene su propia manera de obtener la configuración actual?

La documentación de Android aquí http://developer.android.com/guide/topics/resources/localization.html explica que puede obtener la configuración regional actual con este método:

context.getResources().getConfiguration().locale 

Parece que Java ya proporciona esta información en la forma de este método:

 java.util.Locale.getDefault() 

Entonces, ¿por qué los desarrolladores de Android introdujeron otra forma de obtener la configuración regional? ¿Las dos líneas de código anteriores producirían resultados diferentes cuando se ejecutan lado a lado al mismo tiempo?

One Solution collect form web for “¿Por qué Android tiene su propia manera de obtener la configuración actual?”

Estoy de acuerdo en que es confuso y aunque no estoy atacándolo ni estoy defendiendo, puedo verlo permitiéndole hacer algunas cosas.

Empecemos desde el principio.

java.util.Locale.getDefault() está definido por el tiempo de ejecución de java. Es el idioma del teléfono / dispositivo. Es lo que da poder a las cosas como DateFormats (formato ISO Dateformat, estándar de formato US, etc), NumberFormats (coma o decimales, agrupaciones de 3 o 4, etc) y CurrenyFormats (Parece un $ o un CAD) cuando no hay configuración regional dado. Para estos casos, probablemente sea mejor especificar la configuración regional para estos tipos de objetos.

context.getResources().getConfiguration().locale es el entorno local que está registrado con el paquete de recursos actual en el Contexto dado. Puede incluir el valor de configuración regional que todo el contenido de recursos respetará para el par de contexto / recursos actual. La configuración puede ser similar al estado actual del dispositivo que mejor se filtra a los recursos actuales. No es necesario que especifique ningún contenido que cambie en función de la configuración regional, pero es una opción.

Los recursos utilizan un conjunto de discriminadores en la Configuración como orientación, ancho de pantalla, entorno regional, etc. Así, dentro de su aplicación, puede permitir sustituir los recursos actuales () por otro simplemente cambiando la configuración de la aplicación de configuración regional a una configuración regional distinta. Como por ejemplo, usted estaba haciendo un diseño para una dirección. Es posible que desee que ciertos campos cambien según el país seleccionado. (No digo que este es el comportamiento correcto para tal aplicación, pero es la cosa más simple de pensar en este momento). Si tuviera que confiar simplemente en Locale.getDefault (), haría para un reajuste torpe de apps del sistema y estado cuando usted quisiera hacer algo como acabo de describir.

Es esencial que se requiera modificar la configuración regional para todo el dispositivo (esto no es necesariamente seguro, ni es algo que cualquier usuario antiguo disfrutaría). Incluso si no hacemos caso de los problemas del encargado de la seguridad que serían duplicados por el anfitrión vm; En la mayoría de los dispositivos hay un montón de estado que se almacena en caché para el kit de país. Por lo tanto, habría un retraso considerable y probablemente una gran cantidad de inestabilidad cambiando este valor (si alguien pudiera hacerlo). La otra alternativa sería especificar siempre la configuración regional para todo. Se podía ver lo molesto que sería. Así que está dentro de la Configuración del Contexto.

Así que si bien es incómodo, sí proporciona un grado extra de libertad y protección, y comodidad. La mayor parte del tiempo será Locale.getDefault () desde que se inició su aplicación desde un proceso cuyo contexto base se inicializó en Locale.getDefault (). En general, evitaría usar el valor Locale.getDefault () demasiado. No hay demasiadas veces en el desarrollo de la aplicación de consumo cuando sería algo que debe ser de confianza.

Una vez más no basado en hechos, ya que no soy un OS dev, basados ​​principalmente en analizar los pros y los contras del sistema. Creo que el escenario en la configuración es completamente razonable.

  • Cambiar el idioma de las cadenas en la actividad de Android
  • Android: cambia la programación del sistema del dispositivo mediante programación
  • Cómo obtener el formato de fecha de configuración regional en mes y día
  • ¿Puedo acceder a recursos de diferentes idiomas de Android?
  • Cómo obtener el código de idioma IETF BCP47 en la API de Android <21
  • Android: ¿Cómo mantener la configuración local de la aplicación independiente de System Locale?
  • Obtener la variante de la configuración regional para el chino simplificado
  • Cómo crear una instancia de moneda con un país no ISO 3166 como en_UK?
  • Lenguaje hindi
  • Los números arábigos con ar-ae y ar-sa locale en Android
  • Texto de Android a voz en diferentes idiomas
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.