Detección de hora automática

La detección de hora automática recibe sugerencias de horarios de varias fuentes y selecciona y configura el reloj del sistema en Android para que coincida. Se proporcionaron versiones anteriores de Android dos formas de establecer la fecha y la hora, ya sea manualmente por usuario o con detección automática de la hora, y mediante una de estas opciones:

  • telephony usa señales de telefonía de identidad de red y zona horaria (NITZ).
  • network usa servidores de hora de protocolo NTP.

Cada opción requiere conexiones a redes externas, que no siempre están disponibles en Android. Industria automotriz. Por ejemplo, en algunos países, es posible que algunos vehículos no tengan telefonía integrada. Por lo tanto, El tiempo de los sistemas globales de navegación por satélite (GNSS) se proporciona como fuente del sistema. tiempo para que lo uses cuando la conectividad de red no esté disponible.

Esta próxima versión de Android ofrece dos opciones más para detectar y establecer la hora automáticamente:

  • gnss usa la función de satélite global Sistemas de navegación (GNSS)
  • external usos una propiedad de VHAL o la API del sistema.

Habilitar la detección automática de la hora

Para habilitar la detección automática de la hora, asegúrate de seleccionar Configuración > Fecha y Tiempo > Ajuste automático de fecha y Hora:

Figura 1: Selecciona Automática Hora

Configurar fuentes de tiempo

Para especificar las fuentes de tiempo que se deben incluir en la detección automática de la hora y la prioridad en la que se deben considerar estas fuentes de tiempo, debes modificar el recurso del dispositivo archivo de configuración, core/res/res/values/config.xml:

<!-- 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>telephony</item>
    <item>network</item>
</string-array>

En este ejemplo, telephony y network se consideran en Se priorizan la detección automática de la hora y las sugerencias de horarios de telephony antes de network sugerencias de horarios.

En términos generales, las sugerencias de una fuente de mayor prioridad se ignoran si la sugerencia no es válido o si la sugerencia es demasiado antigua. Además, si la sugerencia válida de mayor prioridad coincide con la hora actual del reloj del sistema del dispositivo con varios segundos (el valor predeterminado es de dos (2) segundos), el tiempo no se cambiará.

Límite de tiempo inferior

Android 12 proporciona un nuevo límite de tiempo inferior que se debe usar cuando validar las sugerencias de horarios. Antes de esta función, la detección automática de la hora no validaba el hora UTC entrante sugerida. Con esta función, los tiempos que transcurren antes del límite inferior descartada.

El valor del límite inferior se determina a partir de una fecha derivada de la marca de tiempo de compilación. Esto funciona en el principio de que no puede haber un momento válido antes de compilar la imagen del sistema. Android no aplicar un límite superior.

Sugerencias de hora de GNSS

La fuente de hora gnss es nueva en Android 12 y se proporciona mediante señales de GPS. Este es una fuente confiable para los momentos en que telephony y network no están disponibles. Esta opción se agrega a la nueva GnssTimeUpdateService en SystemServer que escucha de forma pasiva actualizaciones de ubicación Cuando se recibe una ubicación válida, GnssTimeUpdateService envía una sugerencia a TimeDetectorService, que y, luego, determina si se debe actualizar el reloj del sistema.

De forma predeterminada, la fuente de hora gnss no está habilitada en AOSP y, por lo tanto, tiene las siguientes características: deben habilitarse los siguientes socios:

<!-- 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>telephony</item>
    <item>network</item>
    <item>gnss</item>
</string-array>

<!-- Enables the GnssTimeUpdate service. This is the global switch for enabling Gnss time based
    suggestions to TimeDetector service. See also config_autoTimeSourcesPriority. -->
<bool name="config_enableGnssTimeUpdateService">true</bool>

Para habilitar esta función, haz lo siguiente:

  1. Actualiza config_enableGnssTimeUpdateService. El valor de config_enableGnssTimeUpdateService debe configurarse como true.
  2. Actualiza config_autoTimeSourcesPriority. Se debe agregar gnss al lista de elementos de config_autoTimeSourcesPriority. La posición de gnss en la lista de prioridades determina la prioridad que se le da a las sugerencias de GNSS, con respecto a los valores de otras fuentes.

Impacto en la alimentación

GnssTimeUpdateService escucha las actualizaciones de ubicación de forma pasiva, lo que significa que El GPS nunca se activa de forma activa para consumir energía adicional. Como resultado, la energía consumida cuando si la fuente de GNSS está habilitada, es insignificante. Esto también significa que, a menos que otra app o servicio el sistema solicita activamente actualizaciones de ubicación, GnssTimeUpdateService no obtiene una ubicación actualizar y sugerir una hora GNSS.

Prueba

Conjunto de pruebas de compatibilidad (CTS)

Se proporciona una prueba del CTS para verificar que haya disponible una hora proporcionada por el GNSS. Para obtener más información, consulta LocationShellCommand.java

Pruebas de unidades

Consulta las pruebas de unidades básicas en el siguiente archivo:

atest frameworks/base/services/tests/servicestests/src/com/android/server/timedetector/GnssTimeUpdateServiceTest.java

Pruebas manuales

Para probar esta función, se agregaron nuevos comandos a LocationShellCommand.java Usa estos comandos para agregar pruebas con los que puedes especificar una ubicación y el horario de GNSS asociado. GnssTimeUpdateService escucha estas actualizaciones de ubicación y periódicamente hace sugerencias.

Nota: Es posible que la interfaz de estos comandos cambie de una versión a otra.

# Enable Master Location Switch in the foreground user (usually user 10 on automotive).
# If you just flashed, this can be done through Setup Wizard.
adb shell cmd location set-location-enabled true --user 10

# Add GPS test provider (this usually fails the first time and will throw a SecurityException
# with "android from <some-uid> not allowed to perform MOCK_LOCATION".)
adb shell cmd location providers add-test-provider gps

# Enable mock location permissions for previous UID
adb shell appops set <uid printed in previous error> android:mock_location allow

# Add GPS test provider (Should work with no errors.)
adb shell cmd location providers add-test-provider gps

# Enable GPS test provider
adb shell cmd location providers set-test-provider-enabled gps true

# Set location with time (time can't be earlier than the limit set by the lower bound.)
adb shell cmd location providers set-test-provider-location gps --location <LATITUDE>,<LONGITUDE> --time <TIME>

Sugerencias de horarios externas

Las sugerencias de horarios externas son otra forma de proporcionar sugerencias automáticas de horarios a Android Estas nuevas opciones permiten brindar sugerencias de horarios completamente personalizadas para Android, que pueden originarse desde varios ECU que, a su vez, pueden usar una combinación de un reloj en tiempo real, GNSS, NITZ o cualquier otra fuente de hora

Las siguientes sugerencias están disponibles en Android 12 para que se consideren como external. sugerencias de horarios:

  • Propiedades de VHAL. Un nuevo Propiedad de VHAL llamado EPOCH_TIME. Esta propiedad denota el número de milisegundos transcurridos desde el 1/1/1970 UTC. Su valor se puede pasar al Android TimeManager para sugerir una nueva hora del sistema Una VHAL de muestra implementación que actualiza esta propiedad se proporciona en el implementación de referencia a continuación.
  • APIs del sistema: Un método nuevo llamado suggestExternalTime() está disponible en TimeManager para proporcionarle al sistema una sugerencia de horario externa. Si el sistema está configurado para tener en cuenta las sugerencias de horarios externas (mediante config_autoTimeSourcesPriority en el archivo de configuración), la marca de tiempo de entrada a este método se usa para establecer la hora del sistema, si no hay valores sugerencias de horarios prioritarios disponibles.

Puedes implementar una solución de hora externa como se describe a continuación:

  1. Actualiza el archivo de configuración de recursos (core/res/res/values/config.xml) Luego, agrega el valor external a config_autoTimeSourcesPriority:
    <string-array name="config_autoTimeSourcesPriority>
            <item>external</item>
            <item>gnss</item>
    </string-array>

    De esta manera, se le indica a Android que otorgue la mayor prioridad a las sugerencias de horarios externos durante la configuración el reloj del sistema. El hardware del vehículo escribe una sugerencia de marca de tiempo en el nuevo EPOCH_TIME Propiedad VHAL.

  2. Una app que proporciona el proveedor lee esta propiedad y llama TimeManager.suggestExternal() Android puede usar la marca de tiempo proporcionada como el nuevo valor del reloj del sistema.