La fonctionnalité Détection automatique de l'heure reçoit des suggestions d'horaires de diverses sources et sélectionne l'option meilleure option, puis définit l'horloge système dans Android en conséquence. Versions précédentes d'Android fournies deux façons de régler la date et l'heure, soit manuellement par utilisateur, soit par la détection automatique de l'heure, en choisissant l'une des options suivantes:
telephony
utilise les signaux de téléphonie NITZ (Network Identity and Time Zone).network
utilise des serveurs de temps NTP (Network Time Protocol).
Chaque option nécessite des connexions à des réseaux externes, qui ne sont pas toujours disponibles dans Android Automobile. Par exemple, dans certains pays, il est possible que certaines voitures ne soient pas équipées de la téléphonie intégrée. Par conséquent, L'heure des systèmes de navigation par satellite (GNSS) est fournie en tant que source du système. à utiliser lorsque la connectivité réseau n'est pas disponible.
Cette prochaine version d'Android propose deux options supplémentaires pour détecter et définir automatiquement l'heure:
gnss
utilise le satellite global Systèmes de navigation (GNSS).external
utilisations une propriété VHAL ou l'API système.
Activer la détection automatique de l'heure
Pour activer la détection automatique de l'heure, veillez à sélectionner Paramètres > Date et Données temporelles > Date automatique et Heure:
Figure 1. Sélectionnez "Date automatique" et Heure
Configurer les sources de temps
Pour spécifier les sources temporelles à inclure dans la détection automatique de l'heure, ainsi que la priorité
pour lesquelles ces sources temporelles doivent être prises en compte, vous devez modifier la ressource de l'appareil
de configuration, 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>
Dans cet exemple, telephony
et network
sont considérés comme
la détection automatique de l'heure et les suggestions d'horaires telephony
sont prioritaires
d'avance sur network
suggestions d'horaires.
En règle générale, les suggestions provenant d'une source ayant une priorité plus élevée sont ignorées si elles est incorrecte ou si la suggestion est trop ancienne. De même, si la suggestion valide ayant la priorité la plus élevée correspond à l'heure actuelle de l'horloge système de l'appareil avec quelques secondes (valeur par défaut) est de deux (2) secondes), l'heure ne sera pas modifiée.
Limite de temps inférieure
Android 12 fournit une nouvelle limite dans le temps inférieure à utiliser lorsque en validant les suggestions d'horaires. Avant cette fonctionnalité, la détection automatique de l'heure ne validait pas l'heure UTC entrante suggérée. Grâce à cette fonctionnalité, le temps écoulé avant la limite inférieure est supprimés.
La valeur de la limite inférieure est déterminée à partir d'une date dérivée de l'horodatage de la compilation. Cela fonctionne sur le principe qu'une heure valide ne peut pas avoir lieu avant la création de l'image système. Android ne d'appliquer une limite supérieure.
Suggestions d'heure GNSS
La source temporelle gnss
est nouvelle sur Android 12 et est fournie par les signaux GPS. C'est
une source fiable pour les moments où telephony
et network
ne sont pas disponibles.
Cette option est ajoutée au nouveau GnssTimeUpdateService
dans
SystemServer qui écoute passivement les mises à jour de la position Lorsqu'un emplacement valide
est reçu,
GnssTimeUpdateService
fait une suggestion à TimeDetectorService
, ce qui
détermine ensuite si l'horloge
système doit être mise à jour.
Par défaut, la source temporelle gnss
n'est pas activée dans AOSP. Par conséquent,
doit être activée par les partenaires:
<!-- 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>
Pour activer cette fonctionnalité:
- Mettez à jour
config_enableGnssTimeUpdateService
. La valeur deconfig_enableGnssTimeUpdateService
doit être défini surtrue
. - Mettez à jour
config_autoTimeSourcesPriority
.gnss
doit être ajouté à liste d'articles pourconfig_autoTimeSourcesPriority
. Position degnss
de la liste de priorités détermine la priorité accordée aux suggestions GNSS, par rapport aux valeurs provenant d'autres sources.
Impact sur l'alimentation
GnssTimeUpdateService
écoute passivement les mises à jour de la position géographique, ce qui signifie qu'il
n'allume jamais activement le GPS pour consommer de l'énergie supplémentaire. Par conséquent, l'énergie consommée lors
si la source GNSS est activée est négligeable. Cela signifie également que, sauf si une autre application ou un autre service
le système demande activement les mises à jour de la position, GnssTimeUpdateService
n'obtient pas de position
et suggérer une heure GNSS.
Tests
Suite de tests de compatibilité (CTS)
Un test CTS est fourni pour vérifier qu'une heure fournie par GNSS est disponible. Pour en savoir plus, consultez
LocationShellCommand.java
Tests unitaires
Vous trouverez les tests unitaires de base dans le fichier suivant:
atest frameworks/base/services/tests/servicestests/src/com/android/server/timedetector/GnssTimeUpdateServiceTest.java
Tests manuels
Pour tester cette fonctionnalité, de nouvelles commandes ont été ajoutées
LocationShellCommand.java
Utilisez ces commandes pour ajouter
avec lesquels vous pouvez spécifier un lieu et l'heure GNSS associée.
GnssTimeUpdateService
écoute ces mises à jour de la position géographique, et régulièrement
fait des suggestions.
Remarque:L'interface de ces commandes peut changer d'une version à l'autre.
# 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>
Suggestions d'horaires externes
Les suggestions d'horaires externes sont un autre moyen de fournir automatiquement des suggestions d'horaires à Android Cette nouvelle option vous permet de fournir des suggestions d'horaires entièrement personnalisées à Android, qui peuvent provenir de divers UCU qui, à leur tour, peuvent utiliser une combinaison d'une horloge en temps réel, GNSS, NITZ ou toute autre source de temps.
Les suggestions suivantes sont disponibles dans Android 12 et peuvent être considérées comme external
suggestions d'horaires:
- Propriétés VHAL. Une nouvelle
Propriété VHAL
EPOCH_TIME
est fournie. Cette propriété indique le nombre de millisecondes écoulées depuis le 01/01/1970 UTC. Sa valeur peut être transmise AndroidTimeManager
pour suggérer une nouvelle heure système. Exemple de VHAL qui met à jour cette propriété est fournie dans implémentation de référence ci-dessous. - API système. Une nouvelle méthode appelée
suggestExternalTime()
est disponible dans TimeManager pour fournir au système une suggestion d'horaire externe. Si le système est configuré pour prendre en compte les suggestions d'horaires externes (viaconfig_autoTimeSourcesPriority
dans le fichier de configuration), l'horodatage transmis à cette méthode est utilisé pour définir l'heure système, si aucune valeur plus élevée suggestions d'horaires prioritaires disponibles.
Vous pouvez mettre en œuvre une solution de gestion du temps externe comme décrit ci-dessous:
- Mettre à jour le fichier de configuration des ressources (
core/res/res/values/config.xml
) puis ajoutez la valeurexternal
àconfig_autoTimeSourcesPriority
:<string-array name="config_autoTimeSourcesPriority> <item>external</item> <item>gnss</item> </string-array>
Vous indiquez ainsi à Android de donner la priorité la plus élevée aux suggestions d'horaires externes lors de la configuration l'horloge système. Le matériel du véhicule écrit une suggestion de code temporel au nouveau
EPOCH_TIME
Propriété VHAL. - Une application fournie par le fournisseur lit cette propriété et appelle
TimeManager.suggestExternal()
Android peut ensuite utiliser le code temporel fourni comme nouvelle valeur d'horloge système.