En esta página, se describe cómo funciona la detección de hora y zona horaria en Android. Esto incluye cómo Android detecta automáticamente la hora y las zonas horarias, las opciones de configuración para los fabricantes de dispositivos y la información de pruebas.
Descripción general de la hora y las zonas horarias
Para determinar la hora local de un usuario y mostrarla en ubicaciones como la barra de estado, Android realiza un seguimiento de dos estados relacionados, pero independientes:
- Hora actual de la época de Unix
- La zona horaria actual
La hora actual de la época de Unix y la zona horaria actual son estados de todo el dispositivo, lo que significa que todos los usuarios de un dispositivo los comparten.
La hora actual de la época de Unix no es un valor fijo. Se actualiza automáticamente para reflejar el paso del tiempo. Además del paso normal del tiempo, la hora actual de la época de Unix de un dispositivo se ajusta si se detecta que es incorrecta, por ejemplo, después de que un dispositivo pierde energía.
La zona horaria actual determina el ajuste que se debe realizar para convertir la hora actual de Unix epoch en una hora local. Por ejemplo, durante el verano en Los Ángeles, el dispositivo resta 7 horas de la hora actual de la época de Unix y, en invierno, resta 8 horas.
Para admitir estos cálculos de hora local, todos los dispositivos Android tienen una base de datos de todas las reglas de zonas horarias globales. Para obtener más información sobre las reglas de zonas horarias, consulta Reglas de zonas horarias.
Cuando un usuario viaja a una nueva ubicación que usa una zona horaria diferente, no es necesario ajustar la hora actual de la época Unix, pero el usuario suele querer ver la hora local en lugar de la hora de su ubicación anterior. Cambiar la zona horaria actual garantiza que se aplique el desplazamiento correcto a la hora actual de la época de Unix para mostrar la hora local correcta de la nueva ubicación.
El AOSP permite que los usuarios controlen de forma independiente si la hora y la zona horaria se configuran automáticamente para ellos a través de los siguientes mecanismos.
- Detección automática de la hora: Garantiza que el dispositivo tenga la hora actual correcta de la época de Unix.
- Detección automática de la zona horaria: Garantiza que el dispositivo tenga la zona horaria actual correcta.
Detección automática de la hora
En esta sección, se proporciona una descripción general del servicio time_detector
que administra la detección automática de tiempo, los controles del usuario, las opciones de configuración y los detalles de las pruebas.
El servicio time_detector
El servicio time_detector
, presente en dispositivos con Android 10 o versiones posteriores, administra la detección automática de la hora. Ajusta la hora actual de la época Unix del dispositivo según sea necesario cuando la detección automática de la hora está habilitada.
El servicio time_detector
siempre se encuentra en uno de los dos estados siguientes: certain
o uncertain
. El estado de certeza o incertidumbre del servicio se determina según las sugerencias de tiempo que recibe de varias fuentes.
Cuando el servicio time_detector
tiene certeza, es decir, cuando recibió una sugerencia con información de hora de Unix, anula la hora de Unix actual si la sugerencia de hora es diferente de la hora de Unix actual.
Cuando time_detector
es incierto, no anula la hora actual. Por lo general, el estado de incertidumbre significa que el servicio de time_detector
no recibió sugerencias de horarios. El servicio time_detector
también se vuelve incierto si las sugerencias que recibió se consideran demasiado antiguas para usarse. Se tiene en cuenta la antigüedad de las sugerencias, ya que los ajustes que usan sugerencias de hora de la época Unix antiguas dependen del reloj en tiempo real transcurrido en el dispositivo, que se supone que es inexacto durante períodos prolongados.
Para establecer la hora actual de la época de Unix automáticamente, un dispositivo tiene varias fuentes que puede usar. En este documento, se denominan orígenes. El servicio time_detector
trata las secuencias de sugerencias como distintas según su origen.
El servicio time_detector
mantiene un registro de la sugerencia más reciente que realizó cada origen. Se hacen sugerencias nuevas a time_detector
si una URL de origen tiene información de hora de época de Unix más reciente disponible. El servicio time_detector
vuelve a evaluar las sugerencias nuevas y existentes, y actualiza el estado del dispositivo cuando se reciben sugerencias.
Si bien la hora UTC se acepta a nivel internacional, existen varios motivos por los que establecer la hora actual de la época Unix no siempre es sencillo para un dispositivo con Android:
- El tiempo de Unix es un sistema de cronometraje ligeramente diferente del tiempo UTC. Para convertir entre ambos, se requiere saber cuándo ocurren los segundos intercalares y cómo los controlan los orígenes.
- Es posible que los orígenes solo estén disponibles en ciertos momentos o en determinadas circunstancias. Por ejemplo, si el origen requiere conectividad de red, es posible que solo esté disponible mientras el dispositivo esté conectado a Internet.
- Los orígenes pueden ser imprecisos o inexactos, o tener errores. Por ejemplo, si una torre de telefonía celular no realiza un seguimiento correcto de la hora UTC, el origen de telefonía podría proporcionar sugerencias de hora inexactas.
- Es posible que se produzcan imprecisiones al obtener el tiempo de época de Unix. Por ejemplo, un retraso en la red, el almacenamiento en búfer o la programación de procesos pueden hacer que la hora de Unix sea imprecisa.
- El reloj de referencia que se usa para ajustar una sugerencia según el tiempo transcurrido desde que se recibió la sugerencia podría ser impreciso.
Existen dos orígenes principales de detección de hora configurados para usarse de forma predeterminada en AOSP:
- Red: Usa servidores de hora del Protocolo de hora de red (NTP).
- Telefonía: Usa señales de telefonía de identidad de red y zona horaria (NITZ).
Tanto los orígenes de telefonía como los de red requieren conectividad a redes externas, que no siempre están disponibles.
A partir de Android 12, Android también admite los siguientes orígenes, que no están configurados para su uso de forma predeterminada:
- GNSS: Usa el proveedor de ubicación GPS para obtener una hora de una fuente de GNSS.
- External: Es un origen genérico que permite a los fabricantes de dispositivos integrar su propia fuente de tiempo de época de Unix.
Configuración de horario
Los usuarios pueden habilitar la detección automática de la hora en Sistema > Fecha y hora en la app de Configuración del AOSP.
Figura 1: Detección automática de la hora en Configuración
En la siguiente tabla, se describen los controles del usuario para la detección de tiempo en la app de Configuración del AOSP.
*En Android 11 y versiones anteriores, este parámetro de configuración se etiqueta como Usar hora proporcionada por la red. |
|||
Ubicación de la configuración de AOSP | Nombre de la configuración del AOSP | Alcance | Comportamiento |
---|---|---|---|
Sistema > Fecha y hora | Establecer hora automáticamente* | Todos los usuarios | Un botón de activación Cuando está activado, el dispositivo es responsable de detectar la hora actual de la época de Unix. Cuando está desactivada, los usuarios tienen controles para configurar la hora del dispositivo de forma manual. |
Cuando el usuario ingresa la hora de forma manual, ingresa su hora local, no la hora de época de Unix. La hora actual de la época de Unix se calcula con la zona horaria actual para derivar una hora de la época de Unix.
Configuración
Los fabricantes de dispositivos pueden configurar el servicio time_detector
de varias maneras, por ejemplo, qué orígenes usar y cómo priorizar los indicadores de estos.
Priorización de orígenes
A partir de Android 12, los fabricantes de dispositivos pueden cambiar el archivo de configuración core/res/res/values/config.xml
para especificar qué orígenes de hora se deben incluir en la detección automática de hora y la prioridad con la que time_detector
considera estos orígenes.
En los dispositivos con Android 11 o versiones anteriores, la prioridad de origen está codificada como ["telephony", "network"]
, lo que significa que las sugerencias de telefonía tienen prioridad sobre las sugerencias de red.
La configuración predeterminada del AOSP es la siguiente:
<!-- Specifies priority of automatic time sources. Suggestions from higher entries in the list
take precedence over lower ones.
See com.android.server.timedetector.TimeDetectorStrategy for available sources. -->
<string-array name="config_autoTimeSourcesPriority">
<item>network</item>
<item>telephony</item>
</string-array>
En Android 12, las sugerencias de red y telefonía se configuran como orígenes para usar de forma predeterminada. Las sugerencias de hora de la red tienen prioridad sobre las sugerencias de hora del teléfono. Los fabricantes de dispositivos pueden cambiar el orden de los orígenes para volver al comportamiento de Android 11 o versiones anteriores, en las que la telefonía tiene una mayor prioridad.
De forma predeterminada, si la sugerencia válida de mayor prioridad coincide con la hora actual del reloj del sistema del dispositivo en un par de segundos, la hora del dispositivo no se cambiará. Esto es para evitar crear trabajo para las apps instaladas que escuchan el intent ACTION_TIME_CHANGED
.
Los valores de origen permitidos son los siguientes:
Límites de tiempo permitidos
Android 14 introduce un límite superior para las sugerencias de hora que recibe el servicio time_detector
. Si el dispositivo admite procesos de 32 bits, el framework establece un límite superior de tiempo para evitar que el dispositivo use una sugerencia de tiempo que podría activar el problema del año 2038.
Android 12 introdujo un límite inferior de tiempo que se usa para validar las sugerencias de tiempo que recibe el servicio time_detector
. El valor del límite inferior de tiempo que se usa para las sugerencias automáticas se establece a partir de la marca de tiempo de la compilación. Esto funciona según el principio de que una hora válida no puede ser anterior a la compilación de la imagen del sistema del dispositivo. Si una sugerencia de hora es anterior al límite inferior, el servicio time_detector
la descarta porque no puede ser válida si la marca de tiempo de compilación es correcta.
En los dispositivos que ejecutan Android 11 o versiones anteriores, el servicio time_detector
no valida las sugerencias de hora de época de Unix entrantes.
Depuración y pruebas de tiempo
En esta sección, se proporciona información para depurar y probar el comportamiento del servicio time_detector
y otros componentes que comparten todos los orígenes.
Interactúa con el servicio de time_detector
Para ver la configuración y el estado del servicio time_detector
, usa el siguiente comando:time_detector
adb shell cmd time_detector dump
Para ver comandos adicionales para depurar y probar la detección de zonas horarias, usa el siguiente comando:
adb shell cmd time_detector help
El resultado de ayuda también describe las propiedades del servicio device_config
que se pueden usar para afectar el comportamiento de time_detector
durante las pruebas o en producción.
Para obtener más información, consulta Cómo configurar un dispositivo con el servicio device_config.
Para validar la detección automática de la hora, los verificadores deben saber qué orígenes usa el servicio time_detector
. A continuación, se muestra un ejemplo del resultado del comando adb shell cmd time_detector dump
, con la información sobre el origen actual y el estado del servicio en negrita:
$ adb shell cmd time_detector dump
TimeDetectorStrategy:
mLastAutoSystemClockTimeSet=null
mEnvironment.isAutoTimeDetectionEnabled()=true
mEnvironment.elapsedRealtimeMillis()=23717241
mEnvironment.systemClockMillis()=1626707861336
mEnvironment.systemClockUpdateThresholdMillis()=2000
mEnvironment.autoTimeLowerBound()=2021-07-19T07:48:05Z(1626680885000)
mEnvironment.autoOriginPriorities()=[network,telephony]
Time change log:
...
Telephony suggestion history:
...
Network suggestion history:
...
Gnss suggestion history:
...
External suggestion history:
...
La información se puede interpretar de la siguiente manera:
Clave | Valor |
---|---|
mEnvironment.isAutoTimeDetectionEnabled() |
Indica si la detección automática de la hora está habilitada. |
mEnvironment.autoTimeLowerBound() |
Es el límite inferior actual que se usa para validar las sugerencias de tiempo. |
mEnvironment.autoOriginPriorities() |
Los orígenes en uso y el orden de prioridad. |
El registro de cambios de hora indica las ocasiones en las que el servicio time_detector
cambió la hora actual de la época de Unix del dispositivo.
La información del historial de sugerencias indica qué sugerencias se hicieron desde cada origen.
Detección automática de la zona horaria
En esta sección, se proporciona una descripción general del servicio time_zone_detector
, que administra la detección automática de la zona horaria, los controles del usuario en la configuración, la detección de la zona horaria de telefonía y ubicación, y los detalles de las pruebas.
El servicio time_zone_detector
El servicio time_zone_detector
, presente en dispositivos que ejecutan Android 11 o versiones posteriores, administra la detección automática de la zona horaria. Ajusta la zona horaria actual del dispositivo según sea necesario cuando se habilita la detección automática de la zona horaria.
Cuando la detección automática de la zona horaria está habilitada, time_zone_detector
puede estar en uno de los siguientes dos estados: certain
y uncertain
.
Cuando el servicio time_zone_detector
se encuentra en el estado determinado, significa que recibió información precisa sobre la zona horaria, lo que puede hacer que anule la zona horaria actual.time_zone_detector
Cuando no es seguro, significa que no recibió información o solo información de baja confianza, por lo que no anulará la zona horaria actual.
Algunos estados del servicio time_zone_detector
pueden incluir aquellos en los que time_zone_detector
no tiene información de zona horaria para usar o en los que tiene varias zonas horarias entre las que elegir. Estos estados son los siguientes:
- Se ingresa a un estado determinado con cero zonas horarias cuando el dispositivo se encuentra en un lugar sin zona horaria, como en aguas internacionales o en un área en disputa.
Este estado es similar a un estado incierto, pero indica que
time_zone_detector
no necesita tomar más medidas para intentar determinar la zona horaria. - Se ingresa un estado determinado con varias zonas horarias en el que hay ambigüedad o condiciones de borde. En este estado, si la zona horaria actual es una de las zonas horarias sobre las que
time_zone_detector
tiene certeza, la zona horaria actual se deja como está. De lo contrario, se usa una de las zonas horarias disponibles. Esto le da atime_zone_detector
un elemento de permanencia si el usuario seleccionó manualmente su zona horaria anteriormente o cuando el dispositivo se acerca a una frontera.
El estado de certeza o incertidumbre del servicio time_zone_detector
se determina mediante las sugerencias de zona horaria que envía un algoritmo.
En general, las sugerencias se dividen en dos tipos que coinciden estrechamente con los estados posibles de time_zone_detector
: certain
y uncertain
. A continuación, se incluyen ejemplos de tipos de sugerencias:
type =
uncertain
,zoneIds = []
- El algoritmo no sabe cuál es la zona horaria.
type =
certain
,zoneIds = ["Europe/London"]
- El algoritmo tiene la certeza de que la zona es Europe/London.
type =
certain
,zoneIds = []
`- El algoritmo es preciso, pero no hay un ID de zona asociado a la ubicación actual.
type =
certain
,zoneIds = ["America/Denver", "America/Phoenix"]
- El algoritmo tiene la certeza de que la respuesta se encuentra en una de las dos zonas, pero no puede elegir entre America/Denver y America/Phoenix.
El servicio time_zone_detector
trata las secuencias de sugerencias como distintas según su algoritmo. Según el algoritmo, las sugerencias también pueden contener metadatos que indiquen el nivel de certeza del algoritmo.
El servicio time_zone_detector
mantiene un registro de la sugerencia más reciente que realizó cada algoritmo. Las sugerencias nuevas se envían al servicio time_zone_detector
si una sugerencia anterior ya no es correcta, es decir, si un algoritmo ahora tiene una sugerencia diferente o si perdió la capacidad de detectar la zona horaria. El servicio time_zone_detector
reevalúa las sugerencias nuevas y existentes, y actualiza el estado del dispositivo cuando se reciben sugerencias.
Android admite dos algoritmos para la detección de zona horaria:
- Telefonía
- Ubicación
Por lo general, el servicio time_zone_detector
usa un solo algoritmo para determinar la zona horaria. Cuando el algoritmo de ubicación es compatible con un dispositivo, el algoritmo que usa el dispositivo se determina en función de la configuración de zona horaria que estableció el usuario. Cuando el algoritmo en uso no tiene certeza sobre la zona horaria, time_zone_detector
no suele usar sugerencias de otro algoritmo. time_zone_detector
puede mantener en la memoria las sugerencias asociadas con algoritmos que no están en uso, pero no se usan a menos que cambie el algoritmo. Cuando el usuario cambia la configuración de la detección automática de la zona horaria y el algoritmo cambia, se usa la sugerencia más reciente disponible para el nuevo algoritmo.
Para obtener detalles sobre la situación en la que se usan varios algoritmos para determinar la zona horaria, consulta Modo de resguardo de telefonía.
Modo de resguardo de telefonía
En dispositivos que ejecutan Android 13 y versiones posteriores, el servicio time_zone_detector
admite el modo de resguardo de telefonía. Este modo permite que Android use las sugerencias de detección de telefonía temporalmente en situaciones en las que la detección de ubicación no puede detectar la zona horaria o cuando la detección de ubicación tarda más que la detección de telefonía.
El modo de resguardo de telefonía se aplica a los dispositivos en los que se admiten la detección de telefonía y de ubicación, y en los que el usuario habilitó la opción Usar la ubicación para establecer la zona horaria en Configuración de zona horaria. El modo se habilita automáticamente cuando se reinicia un dispositivo y cuando se inhabilita el modo de avión.
En Android 14 y versiones posteriores, se puede activar la alternativa de telefonía a través de las APIs de estado de LTZP, es decir, si un LTZP informa que no es seguro y su capacidad para detectar la ubicación o la zona horaria se ve degradada por su entorno, se activa el modo de alternativa de telefonía.
Cuando está en el modo de resguardo de telefonía, el servicio de time_zone_detector
usa las sugerencias de telefonía como si la detección de ubicación estuviera inhabilitada hasta que el algoritmo de ubicación haga una sugerencia determinada. Después de recibir una sugerencia determinada, se inhabilita el modo de respaldo de telefonía y se usan exclusivamente las sugerencias de ubicación.
Para obtener detalles de configuración del modo de respaldo telefónico, consulta Configuración de detección de zona horaria.
Configuración de zona horaria
Los usuarios pueden habilitar y configurar los parámetros de configuración para la detección automática de la zona horaria en la app de Configuración del AOSP.
Figura 2: Detección automática de la zona horaria en Configuración
En la siguiente tabla, se describen los controles del usuario para la detección de zona horaria en la app de Configuración del AOSP.
*En Android 11 y versiones anteriores, este parámetro de configuración se etiqueta como Usar la zona horaria proporcionada por la red. |
|||
Ubicación de la configuración de AOSP | Nombre de la configuración del AOSP | Alcance | Comportamiento |
---|---|---|---|
Sistema > Fecha y hora | Establecer zona horaria automáticamente* | Todos los usuarios | Un botón de activación Cuando está activado, el dispositivo es responsable de detectar la zona horaria actual. Cuando está desactivada, los usuarios tienen controles para establecer la zona horaria del dispositivo de forma manual. |
Sistema > Fecha y hora | Usar la ubicación para establecer la zona horaria | Usuario actual | Un botón de activación Disponible en Android 12 y versiones posteriores. Este botón de activación solo se muestra cuando el dispositivo admite la detección de la zona horaria de la ubicación. Para conocer los cambios introducidos en Android 14, consulta Dispositivos que solo admiten la detección de la zona horaria de la ubicación. |
Ubicación | Usar ubicación | Usuario actual | Un botón de activación Permite o impide el uso de la ubicación del dispositivo en general. El valor es relevante si el dispositivo admite la detección de la zona horaria de la ubicación. |
A continuación, se proporciona una descripción general del comportamiento del dispositivo para la detección de zona horaria según la configuración elegida por el usuario:
[Fecha y hora] Establecer zona horaria automáticamente: DESACTIVADO
- El usuario debe seleccionar la zona horaria de forma manual.
[Fecha y hora] Establecer zona horaria automáticamente: ACTIVADO
[Ubicación] Usar ubicación: DESACTIVADO
- Los indicadores de telefonía se usan para detectar la zona horaria.
[Ubicación] Usar ubicación: ACTIVADO
[Fecha y hora] Usa tu ubicación para configurar la zona horaria: ACTIVADO
- La ubicación se usa para detectar la zona horaria.
[Fecha y hora] Usa tu ubicación para configurar la zona horaria: DESACTIVADO
- Los indicadores de telefonía se usan para detectar la zona horaria.
Varios dispositivos de usuario
Dado que varios de los parámetros de configuración involucrados se limitan al usuario actual, el comportamiento de detección de zona horaria de un dispositivo puede cambiar cuando cambia el usuario actual en un dispositivo con Android para varios usuarios.
El botón de activación Usar la ubicación para establecer la zona horaria se limita al usuario actual y no está restringido por la política del dispositivo, lo que significa que los usuarios siempre pueden cambiar su valor, incluso cuando el botón de activación Establecer la zona horaria automáticamente está desactivado o si otros controles de hora o zona horaria están restringidos por el Device Policy Controller.
Dispositivos que solo admiten el algoritmo de detección de la zona horaria de la ubicación
En esta sección, se describe el comportamiento de los dispositivos que solo admiten el algoritmo de ubicación.
Android 14 y versiones posteriores
- La opción Usar ubicación no se muestra a los usuarios en la app de Configuración del AOSP, y el dispositivo se comporta como si la opción Usar ubicación estuviera habilitada.
- Se ignora el valor del parámetro de configuración
SettingsProvider
con alcance del usuariolocation_time_zone_detection_enabled
. Este valor registra la preferencia del usuario en otros tipos de dispositivos.
Android 12 o Android 13
- La opción Usar ubicación es visible para los usuarios en la app de configuración del AOSP, y los usuarios pueden inhabilitarla. Si la opción está inhabilitada, el dispositivo no detectará la zona horaria automáticamente.
Comportamiento al cambiar a la detección automática y desde ella
Cuando el usuario cambia la detección de zona horaria de manual a automática, es posible que time_zone_detector
ya tenga certeza de la zona horaria actual. Si es así, a medida que el usuario habilite la detección automática, es posible que la zona horaria del dispositivo cambie al mismo tiempo para coincidir con la opinión del servicio time_zone_detector
.
Del mismo modo, cuando el usuario realiza un cambio en la configuración que genera un cambio en el algoritmo actual del servicio de time_zone_detector
, es posible que time_zone_detector
ya haya recibido sugerencias para el nuevo algoritmo, por lo que la hora del dispositivo podría cambiarse de inmediato para que coincida con la opinión del servicio de time_zone_detector
.
Detección de zona horaria por telefonía
La detección de zona horaria por telefonía usa indicadores de telefonía para determinar la zona horaria actual. Para obtener más información, consulta Detección de zona horaria de telefonía.
Detección de la zona horaria de la ubicación
La detección de la zona horaria de la ubicación está disponible en Android 12 o versiones posteriores. Es una función opcional de detección automática de la zona horaria que permite que los dispositivos usen su ubicación para determinar la zona horaria actual.
El servicio location_time_zone_manager
, que se introdujo en Android 12, se ejecuta en el servidor del sistema y contiene el código responsable de enviar sugerencias del algoritmo de ubicación al servicio time_zone_detector
. Para obtener más información, consulta Detección de la zona horaria de la ubicación.
Consideraciones sobre la adopción de funciones
En esta sección, se describen aspectos de la función de detección de zona horaria de la ubicación para ayudar a los fabricantes de dispositivos a determinar si deben adoptar la función en un dispositivo.
Comparación de la detección de ubicación y la telefonía
En la siguiente tabla, se comparan las ventajas y desventajas de usar la ubicación en lugar de los indicadores de telefonía para la detección de la zona horaria.
Categoría | Detección de telefonía | Detección de ubicación |
---|---|---|
Corrección | Varía según el país. Depende de la corrección y la disponibilidad del MCC y el NITZ. |
Depende de la configuración de la función o los componentes del complemento. Por lo general, la corrección varía según los siguientes factores:
|
Capacidad de actualización | La detección de telefonía se basa en los archivos incluidos en el módulo de datos de zona horaria actualizable (APEX com.android.tzdata ). |
Depende de la configuración de la función o los componentes del complemento. Por lo general, la capacidad de actualización depende de si el dispositivo usa datos del mapa de zonas horarias del servidor o del cliente. Los datos del mapa de zona horaria no se incluyen en el módulo Time Zone Data que se usa para actualizar la copia de TZDB de Android y otra información de zona horaria. Los fabricantes de dispositivos también deben tener en cuenta la coherencia de la versión entre las reglas de zona horaria y los datos del mapa de zonas horarias. |
Uso de energía | Sin uso de energía o con uso bajo | Depende de la configuración de ubicación del usuario, los complementos que se usan y, por lo general, qué otras apps solicitan la ubicación. |
Disponibilidad | Solo para dispositivos telefónicos. Por lo general, requiere una SIM en funcionamiento. | La detección de ubicación depende de los proveedores de ubicación disponibles. |
Privacidad del usuario
La zona horaria preferida de un usuario suele determinarse según su ubicación geográfica. La ubicación son datos sensibles. Es posible que a los usuarios les preocupe que se comparta el conocimiento de su ubicación como parte de la detección de la zona horaria. Independientemente de la detección de zona horaria, todas las apps que se ejecutan en un dispositivo pueden leer la zona horaria actual del dispositivo sin necesidad de un permiso de Android, y las apps pueden inferir una idea imprecisa de la ubicación del dispositivo a partir de esta información.
Específicamente, la detección de zona horaria puede funcionar de forma pasiva o activa:
- Pasiva: Algo en el entorno del dispositivo le indica la zona horaria que debe usar en ese entorno.
- Activa: El dispositivo debe calcular la zona horaria por sí mismo y, según la configuración de privacidad de los usuarios y su consentimiento, obtiene la ubicación del dispositivo para hacerlo. Luego, puede compartir su ubicación con servicios externos. Consulta la siguiente discusión para obtener detalles sobre la privacidad y el consentimiento del usuario.
La detección pasiva, como la que se realiza con el algoritmo de telefonía, no tiene implicaciones adicionales para la privacidad de los usuarios.
La detección activa, como la que se realiza con el algoritmo de ubicación, implica determinar la ubicación del dispositivo, algo con lo que los usuarios podrían no estar de acuerdo, y la ubicación podría enviarse a través de una red para determinar el ID de zona horaria.
El enfoque de Android sobre la privacidad del usuario para la detección de la zona horaria le permite al usuario inhabilitar de forma individual los algoritmos que se espera que estén activos. Además, el código de la plataforma de AOSP no se ocupa directamente de la ubicación en sí: la detección de la ubicación y la asignación de la ubicación a los IDs de zona horaria se dejan a los componentes de complemento configurados por los fabricantes de dispositivos.
Para obtener más detalles sobre las funciones de privacidad del usuario, consulta Detección de la zona horaria de la ubicación.
Configuración
Los fabricantes de dispositivos pueden configurar el servicio time_zone_detector
para cambiar su comportamiento. En esta sección, se describen las opciones de configuración para el comportamiento general del servicio time_zone_detector
. Para obtener detalles de configuración de los algoritmos de detección de telefonía y zona horaria, consulta Detección de zona horaria de telefonía y Detección de zona horaria de ubicación.
La configuración base de AOSP se encuentra en frameworks/base/core/res/res/values/config.xml
.
Clave de configuración | Valor del AOSP | Descripción |
---|---|---|
config_supportTelephonyTimeZoneFallback |
true |
Cuando es true , time_zone_detector usa el modo de resguardo de telefonía. Esta función está disponible para Android 13 y versiones posteriores.
|
Alterar el comportamiento predeterminado del dispositivo
En AOSP, la detección automática de la zona horaria está habilitada de forma predeterminada con el parámetro de configuración auto_time_zone
establecido en true
. Para inhabilitar la detección automática de la hora de forma predeterminada, establece el valor de def_auto_time_zone
definido en frameworks/base/packages/SettingsProvider/res/values/defaults.xml
en false
.
Cuando se restablece una copia de seguridad desde otro dispositivo, el framework actualiza el valor del parámetro de configuración auto_time_zone
de forma predeterminada. Si quieres asegurarte de que este parámetro de configuración no se restablezca desde una copia de seguridad, incluye auto_time_zone
en el array restore_blocked_global_settings
definido en frameworks/base/packages/SettingsProvider/res/values/blocked_settings.xml
.
Depuración y pruebas de la zona horaria
En esta sección, se proporciona información para depurar y probar el comportamiento del servicio time_zone_detector
y otros componentes que comparten todos los algoritmos.
Configura un dispositivo con el servicio device_config
El servicio device_config
es un mecanismo que se usa en Android para configurar el comportamiento modificable con valores que, por lo general, se extraen de un servidor remoto con código propietario (no de AOSP). Cuando usas valores de device_config
para las pruebas, en especial durante las pruebas manuales de larga duración, es posible que el dispositivo sincronice las marcas, lo que restablecería las marcas y borraría los valores establecidos para las pruebas.
En Android 12 o versiones posteriores, para evitar temporalmente la sincronización de marcas, usa el siguiente comando:
adb shell cmd device_config set_sync_disabled_for_tests persistent
Para restablecer la sincronización de marcas después de las pruebas, usa el siguiente comando:
adb shell cmd device_config set_sync_disabled_for_tests none
Después de restablecer la sincronización de marcas, reinicia el dispositivo.
Para obtener más información, usa $ adb shell cmd device_config help
.
Interactúa con el servicio time_zone_detector
Para ver la configuración y el estado de time_zone_detector
del servicio time_zone_detector
, usa el siguiente comando:
adb shell cmd time_zone_detector dump
Para ver comandos adicionales para depurar y probar la detección de zonas horarias, usa el siguiente comando:
adb shell cmd time_zone_detector help
El resultado de ayuda también describe las propiedades del servicio device_config
que se pueden usar para afectar el comportamiento del servicio time_zone_detector
durante las pruebas o en producción. Para obtener más información, consulta Cómo configurar un dispositivo con el servicio device_config.
Para validar la detección de zona horaria, los verificadores deben saber qué algoritmo usa time_zone_detector
. Para comprender el algoritmo actual de time_zone_detector
y ejercer influencia sobre él, usa una de las siguientes opciones:
- Verifica visualmente a través de la IU de Configuración. Para obtener más información, consulta Configuración de zona horaria.
Usa la línea de comandos a través de adb:
- Para volcar el estado de
time_zone_detector
, usaadb shell cmd time_zone_detector dump
. - Para modificar la configuración del dispositivo, usa otros comandos de
time_zone_detector
. Para obtener más información, usaadb shell cmd time_zone_detector help
.
- Para volcar el estado de
A continuación, se muestra un ejemplo del resultado del comando adb shell cmd
time_zone_detector dump
, con la información sobre el algoritmo actual y el estado del servicio en negrita:
$ adb shell cmd time_zone_detector dump
TimeZoneDetectorStrategy:
mEnvironment.getCurrentUserId()=0
mEnvironment.getConfiguration(currentUserId)=ConfigurationInternal{mUserId=0, mUserConfigAllowed=true, mTelephonyDetectionSupported=true, mGeoDetectionSupported=true, mAutoDetectionEnabled=true, mLocationEnabled=true, mGeoDetectionEnabled=true}
[Capabilities=TimeZoneCapabilitiesAndConfig{mCapabilities=TimeZoneDetectorCapabilities{mUserHandle=UserHandle{0}, mConfigureAutoDetectionEnabledCapability=40, mConfigureGeoDetectionEnabledCapability=40, mSuggestManualTimeZoneCapability=30}, mConfiguration=TimeZoneConfiguration{mBundle=Bundle[{geoDetectionEnabled=true, autoDetectionEnabled=true}]}}]
mEnvironment.isDeviceTimeZoneInitialized()=true
mEnvironment.getDeviceTimeZone()=Europe/London
Time zone change log:
Manual suggestion history:
...
Geolocation suggestion history:
...
Telephony suggestion history:
...
La información se puede interpretar de la siguiente manera:
Clave | Valor |
---|---|
mUserConfigAllowed |
Indica si el Device Policy Controller impide que el usuario controle la configuración de fecha y hora. |
mTelephonyDetectionSupported |
Indica si el dispositivo tiene detección de zona horaria de telefonía. |
mGeoDetectionSupported |
Indica si el dispositivo admite la detección de la zona horaria de la ubicación. Este es el estado efectivo según la configuración y la presencia de al menos una LTZP. |
mAutoDetectionEnabled |
Indica si está habilitada la detección automática de la zona horaria. |
mLocationEnabled |
Es el botón de activación principal de la ubicación. |
mGeoDetectionEnabled |
El cambio de algoritmo: false indica el algoritmo de telefonía y true indica el algoritmo de ubicación. |
La información del historial de sugerencias indica qué sugerencias se hicieron a través de la configuración (manual) y mediante los algoritmos de telefonía y ubicación.