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:
- Actualiza
config_enableGnssTimeUpdateService
. El valor deconfig_enableGnssTimeUpdateService
debe configurarse comotrue
. - Actualiza
config_autoTimeSourcesPriority
. Se debe agregargnss
al lista de elementos deconfig_autoTimeSourcesPriority
. La posición degnss
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 AndroidTimeManager
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 (medianteconfig_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:
- Actualiza el archivo de configuración de recursos (
core/res/res/values/config.xml
) Luego, agrega el valorexternal
aconfig_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. - 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.