Descripción general de la hora

En esta página, se describe cómo funciona la detección de la hora y la zona horaria en Android. Esto incluye la manera en que Android detecta automáticamente las zonas horarias y la hora, las opciones de configuración para los fabricantes de dispositivos y la información de pruebas.

Descripción general de las zonas horarias y los horarios

Para determinar la hora local de un usuario para que se muestre en ubicaciones como la barra de estado, Android realiza un seguimiento de dos estados relacionados, pero independientes:

  • El tiempo Unix actual del tiempo
  • La zona horaria actual

La hora Unix actual y la zona horaria actual son estados de todo el dispositivo, lo que significa que se comparten por todos los usuarios de un dispositivo.

El tiempo Unix actual del ciclo de entrenamiento no es un valor fijo. Se actualiza automáticamente para reflejar el paso del tiempo. Además del paso de tiempo normal, el tiempo Unix actual de un dispositivo se ajusta si se descubre que es incorrecto, por ejemplo, cuando un dispositivo se queda sin energía.

La zona horaria actual determina el ajuste que se realizará para convertir el horario de tiempo Unix actual en una hora local. Por ejemplo, durante el verano en Los Ángeles, el dispositivo resta 7 horas del tiempo Unix actual y, en invierno, a 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 ubicación nueva que usa una zona horaria diferente, no es necesario ajustar el tiempo Unix actual, pero el usuario, por lo general, quiere ver la hora local en lugar de la hora de la ubicación anterior. Cambiar la zona horaria actual garantiza que se aplique el desplazamiento correcto a la época Unix actual para mostrar la hora local correcta de la nueva ubicación.

AOSP permite a los usuarios controlar de forma independiente si la hora y la zona horaria se configuran automáticamente para ellos mediante los siguientes mecanismos.

  • Detección automática de la hora: Garantiza que el dispositivo tenga el tiempo Unix actual correcto.
  • Detección automática de la zona horaria: Garantiza que el dispositivo tenga la zona horaria actual correcta.

Detección de hora automática

En esta sección, se proporciona una descripción general del servicio time_detector que administra la detección automática de la hora, los controles del usuario, las opciones de configuración y los detalles de prueba.

El servicio time_detector

El servicio time_detector, presente en dispositivos que ejecutan Android 10 o versiones posteriores, administra la detección automática de la hora. Ajusta el tiempo Unix actual 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 dos estados: incierto o cierto. El estado cierto o incierto del servicio se determina a partir de las sugerencias de tiempo que recibe de varias fuentes.

Cuando el servicio time_detector está seguro, lo que significa que recibió una sugerencia con información de tiempo Unix, anula el tiempo Unix actual si la sugerencia de tiempo es diferente del tiempo Unix actual.

Cuando time_detector es incierto, no anula la hora actual. Por lo general, el estado incierto significa que el servicio time_detector no recibió sugerencias de hora. El servicio time_detector también se vuelve incierto si las sugerencias que recibió se consideran demasiado antiguas para usarlas. Se tiene en cuenta la antigüedad de las sugerencias porque los ajustes que usan las antiguas sugerencias de tiempo de época Unix se basan en el reloj en tiempo real transcurrido en el dispositivo, que se supone que es inexacto durante períodos prolongados.

Para establecer automáticamente el tiempo Unix actual, 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 es un servicio con estado, lo que significa que mantiene un registro de la sugerencia más reciente que hizo cada origen. Se hacen sugerencias nuevas a time_detector si un origen tiene información disponible sobre el tiempo de época de Unix más reciente. El servicio time_detector vuelve a evaluar las sugerencias nuevas y existentes, y actualiza el estado del dispositivo cuando se reciben.

Aunque la hora UTC se acuerda a nivel internacional, hay varias razones por las que establecer la hora de Unix actual no siempre es sencillo para un dispositivo Android:

  • El tiempo Unix es un sistema de cronología un poco diferente al horario UTC. La conversión entre los dos requiere saber cuándo ocurren los segundos bisiestos y cómo los controlan los orígenes.
  • Los orígenes pueden estar disponibles solo en determinados momentos o en determinadas circunstancias. Por ejemplo, si el origen requiere conectividad de red, puede estar disponible solo mientras el dispositivo está conectado a Internet.
  • Los orígenes pueden ser imprecisos o imprecisos, o bien tener errores. Por ejemplo, si una torre de telefonía celular no realiza un seguimiento correcto de la "hora universal", el origen de telefonía puede proporcionar sugerencias de hora imprecisas.
  • Es posible que se introduzcan errores cuando se obtiene el tiempo Unix. Por ejemplo, un retraso de la red, el almacenamiento en búfer o la programación de procesos pueden hacer que el tiempo Unix sea impreciso.
  • Es posible que el reloj de referencia que se usa para ajustar una sugerencia según el tiempo transcurrido desde que se recibió la sugerencia sea inexacto.

Hay dos orígenes principales de detección de hora configurados para el uso predeterminado en el AOSP:

  • Red: Usa servidores de tiempo de protocolo NTP.
  • Telefonía: Usa señales de telefonía de identidad de red y zona horaria (NITZ).

Los orígenes de telefonía y 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: Utiliza el proveedor de ubicación GPS para obtener la hora de una fuente GNSS.
  • Externo: Es un origen genérico que permite a los fabricantes de dispositivos integrar su propia fuente de época 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.

Detección automática de la hora en Configuración

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 hora en la app de Configuración del AOSP.

*En Android 11 y versiones anteriores, este parámetro de configuración tiene la etiqueta Usar la 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 la hora automáticamente* Todos los usuarios

Un botón de activación

Cuando está activado, el dispositivo es responsable de detectar el tiempo Unix actual. Cuando está desactivada, los usuarios disponen de 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 Unix. El tiempo Unix actual se calcula usando la zona horaria actual para derivar un tiempo Unix.

Configuración

Los fabricantes de dispositivos pueden configurar el servicio time_detector de varias maneras, como qué orígenes usar y cómo priorizar los indicadores que provienen de ellos.

Priorización del origen

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 tiempo se incluirán en la detección automática de hora, y la prioridad en la que time_detector considera estos orígenes.

En el caso de los dispositivos que ejecutan Android 11 o versiones anteriores, la prioridad de origen se codifica en ["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 red se priorizan sobre las sugerencias de hora de telefonía. Los fabricantes de dispositivos pueden cambiar el orden de los orígenes para volver al comportamiento en Android 11 o versiones anteriores, en las que se da una prioridad más alta a la telefonía.

De forma predeterminada, si la sugerencia válida de prioridad más alta coincide con la hora del reloj del sistema actual del dispositivo en un par de segundos, la hora del dispositivo no se cambiará. De esta manera, se evita crear trabajo para las apps instaladas que escuchan el intent ACTION_TIME_CHANGED.

Los valores de origen permitidos son los siguientes:

Límites permitidos

En Android 14, se introduce un límite superior para las sugerencias de tiempo que recibe el servicio time_detector. Si el dispositivo admite procesos de 32 bits, el framework establece un límite de tiempo superior para evitar que el dispositivo use una sugerencia de hora que podría activar el problema de Y2038.

Android 12 introdujo un límite de tiempo inferior que se usa para validar las sugerencias de tiempo que recibe el servicio time_detector. El valor de límite inferior que se usa para las sugerencias automáticas se establece a partir de la marca de tiempo de compilación. Esto funciona con el principio de que no puede haber un tiempo válido antes de que se compile la imagen del sistema del dispositivo. Si una sugerencia de tiempo es anterior al límite inferior, el servicio time_detector descarta la sugerencia porque no puede ser válida si la marca de tiempo de compilación es correcta.

En el caso de los dispositivos que ejecutan Android 11 o versiones anteriores, el servicio time_detector no valida las sugerencias entrantes de época de Unix.

Tiempo de depuración y pruebas

En esta sección, se proporciona información para depurar y probar el comportamiento del servicio time_detector y otros componentes compartidos por todos los orígenes.

Interactúa con el servicio time_detector

Para ver la configuración y el estado del servicio time_detector del servicio time_detector, usa el siguiente comando:

adb shell cmd time_detector dump

Si quieres ver comandos adicionales para depurar y probar la detección de la zona horaria, usa el siguiente comando:

adb shell cmd time_detector help

En el resultado de ayuda, también se describen las propiedades del servicio device_config que se pueden usar para afectar el comportamiento de time_detector durante las pruebas o la producción. Para obtener más detalles, consulta Cómo configurar un dispositivo con el servicio device_config.

Para validar la detección automática de la hora, los verificadores deben conocer qué orígenes usa el servicio time_detector. El siguiente es un ejemplo del resultado del comando adb shell cmd time_detector dump, con la información sobre el origen y el estado actuales 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() 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 horario.
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ó el tiempo de época Unix actual del dispositivo.

La información del historial de sugerencias indica qué sugerencias realizó 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 de 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 la detección automática de la zona horaria está habilitada.

Cuando la detección automática de la zona horaria está habilitada, time_zone_detector puede estar en uno de dos estados: incierto y cierto.

Cuando el servicio time_zone_detector se encuentra en un estado determinado, significa que el servicio time_zone_detector recibió información sólida sobre la zona horaria, lo que puede provocar que anule la zona horaria actual. Cuando es incierto, significa que no recibió información o solo recibió información de baja confianza, lo que significa 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 para elegir. Los estados son los siguientes:

  • Se ingresa un estado determinado con cero zonas horarias cuando el dispositivo se encuentra en algún lugar sin una zona horaria, como en aguas internacionales o en un área en conflicto. Este estado es similar a un estado incierto, pero indica que time_zone_detector no necesita realizar ninguna otra acción para tratar de determinar la zona horaria.
  • Se ingresa un estado determinado con varias zonas horarias cuando hay condiciones ambiguas o fronterizas. En este estado, si la zona horaria actual es una de las zonas horarias de las que time_zone_detector está seguro, la zona horaria actual se deja tal como está. De lo contrario, se utiliza una de las zonas horarias disponibles. Esto le da a time_zone_detector un elemento de permanencia si el usuario seleccionó manualmente su zona horaria con anterioridad o cuando el dispositivo se acerca a un borde.

El estado determinado o incierto del servicio time_zone_detector se determina a través de las sugerencias de zona horaria que envía un algoritmo.

Por lo general, las sugerencias vienen en dos tipos que coinciden estrechamente con los estados posibles de time_zone_detector: cierto e incierto. Los siguientes son ejemplos de tipos de sugerencias:

  • tipo = uncertain, zoneIds = []

    • El algoritmo no sabe cuál es la zona horaria.
  • tipo = certain, zoneIds = ["Europe/London"]

    • El algoritmo está seguro de que la zona es Europa/Londres.
  • tipo = certain, zoneIds = []`

    • El algoritmo es seguro, pero no hay un ID de zona asociado con la ubicación actual.
  • tipo = certain, zoneIds = ["America/Denver", "America/Phoenix"]

    • El algoritmo está seguro de que la respuesta es una de dos zonas, pero no puede elegir entre "América/Denver" y "América/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 indican qué tan seguro está el algoritmo.

El servicio time_zone_detector es un servicio con estado, lo que significa que mantiene un registro de la sugerencia más reciente que hizo cada algoritmo. Se envían sugerencias nuevas 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 vuelve a evaluar las sugerencias nuevas y existentes, y actualiza el estado del dispositivo cuando se reciben sugerencias.

Android admite dos algoritmos para la detección de la zona horaria:

  • Telefonía
  • Ubicación

Por lo general, el servicio time_zone_detector usa un solo algoritmo para determinar la zona horaria. Cuando un dispositivo admite el algoritmo de ubicación, este se determina según la configuración de la zona horaria que estableció el usuario. Cuando el algoritmo en uso se vuelve incierto con respecto a la zona horaria, time_zone_detector no suele usar sugerencias de un algoritmo diferente. time_zone_detector puede retener en la memoria las sugerencias asociadas con algoritmos que no están en uso, pero no se usan a menos que el algoritmo cambie. 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 algoritmo nuevo.

Si deseas 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 los 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 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 en detectar la zona horaria que la detección de telefonía.

El modo de resguardo de telefonía se aplica a los dispositivos en los que se admite la detección de ubicación y telefonía, y en los que el usuario habilitó Usar la ubicación para establecer la zona horaria en la Configuración de zona horaria. El modo se habilita automáticamente cuando se reinicia un dispositivo y cuando el modo de avión está inhabilitado.

En Android 14 y versiones posteriores, el resguardo de telefonía se puede activar a través de las APIs de informes de estado de LTZP, es decir, si un LTZP informa que es incierto y se degrada su capacidad para detectar la ubicación o zona horaria debido a su entorno, se activa el modo de resguardo de telefonía.

Cuando se utiliza el modo de resguardo de telefonía, el servicio de time_zone_detector usa sugerencias de telefonía como si la detección de ubicación estuviera inhabilitada hasta que el algoritmo de ubicación realice una sugerencia determinada. Después de recibir una sugerencia determinada, el modo de resguardo de telefonía se inhabilita y las sugerencias de ubicación se usan de forma exclusiva.

Para obtener detalles de configuración para el modo de resguardo de telefonía, consulta Configuración de detección de zona horaria.

Configuración de zona horaria

Los usuarios pueden habilitar y configurar la configuración para la detección automática de la zona horaria en la app de Configuración del AOSP.

Detección automática de la zona horaria en Configuración

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 tiene la etiqueta 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 la 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 reciben controles para configurar la zona horaria del dispositivo de forma manual.

Sistema > Fecha y hora Usar ubicación para establecer la zona horaria Usuario actual

Un botón de activación

Disponible a partir de Android 12. 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 la versión 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 la zona horaria, según la configuración que haya elegido el usuario:

  • [Fecha y hora] Establecer zona horaria automáticamente: DESACTIVADA

    • El usuario debe seleccionar la zona horaria de forma manual.
  • [Fecha y hora] Establecer zona horaria automáticamente: ACTIVADA

    • [Ubicación] Usar ubicación: DESACTIVADO

      • Las señales de telefonía se utilizan para detectar la zona horaria.
    • [Ubicación] Usar ubicación: ACTIVADO

      • [Fecha y hora] Usar la ubicación para configurar la zona horaria: ACTIVADA

        • La ubicación se usa para detectar la zona horaria.
      • [Fecha y hora] Usar la ubicación para establecer la zona horaria: DESACTIVADA

        • Las señales de telefonía se usan para detectar la zona horaria.

Dispositivos para varios usuarios

Como varios de los parámetros de configuración involucrados se limitan al usuario actual, el comportamiento de detección de la zona horaria de un dispositivo puede cambiar cuando el usuario actual cambia en un dispositivo Android multiusuario.

El botón de activación Usar la ubicación para configurar la zona horaria se limita al usuario actual y no está restringido por la política de dispositivo, lo que significa que los usuarios pueden cambiar su valor en todo momento, incluso cuando el botón de activación Establecer zona horaria automáticamente está desactivado o si el controlador de Device Policy está restringido otros controles de hora o zona horaria.

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 de la configuración de SettingsProvider centrada en el usuario location_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 está visible para los usuarios en la app de Configuración del AOSP, pero pueden inhabilitarla. Si la opción está inhabilitada, el dispositivo no detectará la zona horaria automáticamente.

Comportamiento cuando se cambia hacia la detección automática y desde ella

Cuando el usuario cambia la detección de la zona horaria de manual a automática, es posible que time_zone_detector ya esté seguro de la zona horaria actual. De ser así, a medida que el usuario habilita la detección automática, es posible que la zona horaria del dispositivo se cambie al mismo tiempo para que coincida con la opinión del servicio de time_zone_detector.

De manera similar, cuando el usuario realiza un cambio en la Configuración que genera una modificación en el algoritmo actual del servicio time_zone_detector, es posible que time_zone_detector ya haya recibido sugerencias para el algoritmo nuevo. Por lo tanto, la hora del dispositivo podría cambiar de inmediato para que coincida con la opinión del servicio time_zone_detector.

Detección de zona horaria de telefonía

La detección de la zona horaria de la telefonía usa señales 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 de algoritmos 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 los aspectos de la función de detección de la zona horaria de la ubicación para ayudar a un fabricante de dispositivos a determinar si debe adoptar la función en un dispositivo.

Compara la telefonía y la detección de ubicación

En la siguiente tabla, se muestra una comparación de las ventajas y desventajas de usar la ubicación en lugar de las señales de telefonía para la detección de la zona horaria.

Detección de telefonía Detección de ubicación
Precisión Varía según el país.

Depende de la cuenta de MCC y de la precisión y disponibilidad de NITZ.
Depende de la configuración de la función o de los componentes de los complementos.

La precisión suele variar en los siguientes aspectos:
  • Precisión y regularidad del proveedor de ubicación
  • La calidad de los datos del mapa de zona horaria.
Capacidad de actualización La detección de telefonía se basa en archivos que se incluyen en el módulo de datos de zona horaria (com.android.tzdata APEX) que se puede actualizar. Depende de la configuración de la función o de los componentes de los complementos.

La capacidad de actualización suele depender de si el dispositivo usa datos de mapa de zona horaria del servidor o del cliente.

Nota: Los datos del mapa de zona horaria no se encuentran en el módulo de datos de zona horaria que se usa para actualizar la copia de Android de TZDB y otra información sobre la zona horaria.

Los fabricantes de dispositivos también deben considerar la coherencia de la versión entre las reglas de zona horaria y los datos del mapa de zona horaria.
Uso de energía Bajo consumo de energía o ninguno 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 que funcione. La detección de la ubicación depende de los proveedores de ubicación disponibles.
Privacidad del usuario

Por lo general, la zona horaria preferida de un usuario se determina por su ubicación geográfica. La ubicación es un dato sensible. Puede que a los usuarios les preocupe que se comparta su ubicación como parte de la detección de la zona horaria. Sin relación con la detección de la 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 pueden inferir una idea imprecisa de la ubicación del dispositivo a partir de esta información.

Más específicamente, la detección de zona horaria puede funcionar a través de medios pasivos o activos:

  • Pasiva: Algo en el entorno del dispositivo le indica al dispositivo la zona horaria que debe usar en ese entorno.
  • Activa: El dispositivo debe determinar la zona horaria por su cuenta y, según la configuración de privacidad del usuario y su consentimiento, obtiene la ubicación del dispositivo para hacerlo. Luego, puede compartir su ubicación con servicios externos. Consulta el debate a continuación para obtener detalles sobre la privacidad y el consentimiento del usuario.

La detección pasiva, como la del algoritmo de telefonía, no tiene consecuencias adicionales en la privacidad para los usuarios.

La detección activa, al igual que con el algoritmo de ubicación, implica determinar la ubicación del dispositivo, con la que los usuarios podrían no aceptarla, 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 zona horaria le brinda al usuario la capacidad de inhabilitar individualmente los algoritmos que se espera que estén activos. Además, el código de la plataforma del AOSP no se relaciona directamente con 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 cargo de los componentes complementarios 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 para 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 del AOSP se encuentra en frameworks/base/core/res/res/values/config.xml.

Clave de configuración Valor de AOSP Descripción
config_supportTelephonyTimeZoneFallback true Cuando es true, time_zone_detector usa el modo de resguardo de telefonía. Está disponible para Android 13 y versiones posteriores.

Modificación del comportamiento predeterminado del dispositivo

En el 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 restableces una copia de seguridad desde otro dispositivo, el framework actualiza el valor de la configuración auto_time_zone de forma predeterminada. Si deseas asegurarte de que esta 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 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 mediante un código de propiedad (que no pertenece al AOSP). Cuando se usan valores device_config para pruebas, en especial durante pruebas manuales de larga duración, el dispositivo podría sincronizar 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 de forma temporal la sincronización de marcas, usa lo siguiente:

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 lo siguiente:

adb shell cmd time_zone_detector dump

Si quieres ver comandos adicionales para depurar y probar la detección de la zona horaria, usa el siguiente comando:

adb shell cmd time_zone_detector help

En el resultado de ayuda, también se describen las propiedades del servicio de device_config que se pueden usar para modificar el comportamiento del servicio time_zone_detector durante las pruebas o la producción. Para obtener más detalles, consulta Cómo configurar un dispositivo con el servicio device_config.

Para validar la detección de la zona horaria, los verificadores deben conocer qué algoritmo usa time_zone_detector. Para comprender e influir en el algoritmo actual de time_zone_detector, usa una de las siguientes opciones:

  • Realiza una verificación visual en la IU de Configuración. Para obtener más información, consulta Configuración de la zona horaria.
  • Usa la línea de comandos mediante adb:

    • Para volcar el estado time_zone_detector, usa adb shell cmd time_zone_detector dump
    • Para modificar la configuración del dispositivo, usa otros comandos time_zone_detector. Para obtener más información, usa adb shell cmd time_zone_detector help.

El siguiente es 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 Si el controlador de política de dispositivos no permite que el usuario controle la configuración de fecha y hora.
mTelephonyDetectionSupported Indica si el dispositivo tiene detección de zona horaria por telefonía.
mGeoDetectionSupported Indica si el dispositivo admite la detección de la zona horaria de la ubicación. Este es el estado eficaz según la configuración y la presencia de al menos un LTZP.
mAutoDetectionEnabled Indica si la detección automática de la zona horaria está habilitada.
mLocationEnabled El botón de activación de la ubicación principal.
mGeoDetectionEnabled El interruptor del 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 realizaron a través de la configuración (manual) y de los algoritmos de telefonía y ubicación.