La detección automática de la hora recibe sugerencias de hora de varias fuentes, selecciona la mejor opción y, luego, configura el reloj del sistema en Android para que coincida. Las versiones anteriores de Android proporcionaban dos formas de establecer la fecha y la hora: de forma manual por usuario o por detección automática de la hora, y se establecían con una de estas opciones:
telephonyusa señales de telefonía de identidad de red y zona horaria (NITZ).networkusa servidores de hora del Protocolo de hora de red (NTP).
Cada opción requiere conexiones a redes externas, que no siempre están disponibles en Android Automotive. Por ejemplo, en algunos países, es posible que algunos automóviles no tengan telefonía integrada. Por lo tanto, la hora de los sistemas globales de navegación por satélite (GNSS) se proporciona como fuente de hora del sistema para que la uses cuando no haya conectividad de red disponible.
En esta próxima versión de Android, se proporcionan dos opciones más para detectar y configurar la hora automáticamente:
gnssusa sistemas globales de navegación por satélite (GNSS).externalusa una propiedad de VHAL o la API del sistema.
Habilita 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 hora > Fecha y hora automáticas:

Figura 1: Selecciona Fecha y hora automáticas.
Configura las fuentes de tiempo
Para especificar qué fuentes de tiempo se deben incluir en la detección automática de tiempo y la prioridad en la que se deben considerar estas fuentes de tiempo, debes modificar el archivo de configuración de recursos del dispositivo, 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 la detección automática de tiempo, y las sugerencias de tiempo de telephony se priorizan por sobre las de network.
En general, las sugerencias de una fuente de mayor prioridad se ignoran si no son válidas o si son demasiado antiguas. Además, si la sugerencia válida de mayor prioridad coincide con la hora actual del reloj del sistema del dispositivo en un lapso de varios segundos (el valor predeterminado es de dos (2) segundos), no se cambiará la hora.
Límite inferior de tiempo
Android 12 proporciona un nuevo límite inferior de tiempo para usar cuando se validan las sugerencias de tiempo. Antes de esta función, la detección automática de la hora no validaba la hora UTC entrante sugerida. Con esta función, se descartan los tiempos que transcurren antes del límite inferior.
El valor del límite inferior se determina a partir de una fecha derivada de la marca de tiempo de la compilación. Esto se basa en el principio de que no puede ocurrir una hora válida antes de que se haya compilado la imagen del sistema. Android no aplica un límite superior.
Sugerencias de hora del GNSS
La fuente de tiempo gnss es nueva en Android 12 y se proporciona a través de señales de GPS. Esta es una fuente confiable de tiempo cuando telephony y network no están disponibles.
Esta opción se agrega al nuevo GnssTimeUpdateService en SystemServer que detecta de forma pasiva las actualizaciones de ubicación. Cuando se recibe una ubicación válida, GnssTimeUpdateService hace una sugerencia a TimeDetectorService, que luego determina si se debe actualizar el reloj del sistema.
De forma predeterminada, la fuente de tiempo gnss no está habilitada en el AOSP y, por lo tanto, los socios deben habilitarla:
<!-- 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:
- Actualiza tu
config_enableGnssTimeUpdateService. El valor deconfig_enableGnssTimeUpdateServicese debe establecer entrue. - Actualiza tu
config_autoTimeSourcesPriority. Se debe agregargnssa la lista de elementos deconfig_autoTimeSourcesPriority. La posición degnssen la lista de prioridad determina la prioridad que se les otorga a las sugerencias del GNSS en relación con los valores de otras fuentes.
Impacto en la potencia
GnssTimeUpdateService escucha de forma pasiva las actualizaciones de ubicación, lo que significa que nunca activa el GPS de forma activa para consumir energía adicional. Como resultado, la energía que se consume cuando se habilita la fuente GNSS es insignificante. Esto también significa que, a menos que otra app o servicio del sistema solicite de forma activa actualizaciones de ubicación, GnssTimeUpdateService no recibirá una actualización de ubicación ni sugerirá una hora del GNSS.
Prueba
Conjunto de pruebas de compatibilidad (CTS)
Se proporciona una prueba del CTS para verificar que esté disponible la 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 comandos nuevos a LocationShellCommand.java. Usa estos comandos para agregar proveedores de pruebas con los que puedes especificar una ubicación y la hora del GNSS asociada.
GnssTimeUpdateService escucha estas actualizaciones de ubicación y, periódicamente, hace sugerencias.
Nota: La interfaz de estos comandos puede cambiar entre versiones.
# 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 externos
Las sugerencias de tiempo externas son otra forma de proporcionar sugerencias de tiempo automáticas a Android. Esta nueva opción te permite proporcionar sugerencias de tiempo completamente personalizadas a Android, que pueden provenir de varias ECU que, a su vez, pueden usar una combinación de un reloj en tiempo real, GNSS, NITZ o cualquier otra fuente de tiempo.
En Android 12, se encuentran disponibles las siguientes sugerencias para tener en cuenta como sugerencias de external:
- Propiedades de VHAL. Se proporciona una nueva propiedad de VHAL llamada
EPOCH_TIME. Esta propiedad denota la cantidad de milisegundos transcurridos desde el 1/1/1970 UTC. Su valor se puede pasar aTimeManagerde Android para sugerir una nueva hora del sistema. En la página de implementación de referencia, se proporciona una implementación de muestra del VHAL que actualiza esta propiedad. - APIs del sistema. Hay un nuevo método llamado
suggestExternalTime()disponible en TimeManager para proporcionar al sistema una sugerencia de hora externa. Si el sistema está configurado para tener en cuenta las sugerencias de hora externas (conconfig_autoTimeSourcesPriorityen el archivo de configuración), la marca de tiempo que se pasa a este método se usa para establecer la hora del sistema si no hay sugerencias de hora de mayor prioridad disponibles.
Puedes implementar una solución de tiempo externa como se describe a continuación:
- Actualiza el archivo de configuración de recursos (
core/res/res/values/config.xml) y, luego, agrega el valorexternalaconfig_autoTimeSourcesPriority:<string-array name="config_autoTimeSourcesPriority> <item>external</item> <item>gnss</item> </string-array>Si lo haces, le indicas a Android que les dé la prioridad más alta a las sugerencias de hora externas cuando configure el reloj del sistema. El hardware del vehículo escribe una sugerencia de marca de tiempo en la nueva propiedad de VHAL
EPOCH_TIME. - Una app proporcionada por el proveedor lee esta propiedad y llama a
TimeManager.suggestExternal(). Luego, Android puede usar la marca de tiempo proporcionada como el nuevo valor del reloj del sistema.