La détection automatique de l'heure reçoit des suggestions d'heure provenant de diverses sources, sélectionne la meilleure option, puis définit l'horloge système d'Android en conséquence. Les versions précédentes d'Android proposaient deux façons de définir la date et l'heure, soit manuellement par utilisateur, soit par détection automatique de l'heure, et définies par l'une des options suivantes:
telephony
utilise des signaux téléphoniques 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 Automotive. Par exemple, dans certains pays, certaines voitures ne disposent pas de 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 d'heure système à utiliser lorsque la connectivité réseau n'est pas disponible.
Cette prochaine version d'Android propose deux autres options pour détecter et définir automatiquement l'heure:
gnss
utilise les systèmes de navigation par satellite mondiaux (GNSS).external
utilise une propriété VHAL ou l'API System.
Activer la détection automatique de l'heure
Pour activer la détection automatique de l'heure, assurez-vous de sélectionner Paramètres > Date et heure > Date et heure automatiques:
Figure 1. Sélectionnez "Date/Heure automatiques".
Configurer les sources temporelles
Pour spécifier les sources de temps à inclure dans la détection automatique du temps et la priorité à laquelle ces sources de temps doivent être prises en compte, vous devez modifier le fichier de configuration des ressources de l'appareil, 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 pris en compte dans la détection automatique de l'heure, et les suggestions d'heure telephony
sont prioritaires par rapport aux suggestions d'heure network
.
En règle générale, les suggestions provenant d'une source de priorité supérieure sont ignorées si elles sont non valides ou trop anciennes. De plus, si la suggestion valide de priorité la plus élevée correspond à l'heure de l'horloge système actuelle de l'appareil à quelques secondes près (la valeur par défaut est de deux (2) secondes), l'heure ne change pas.
Limite temporelle inférieure
Android 12 fournit une nouvelle limite de temps inférieure à utiliser lors de la validation des suggestions de temps. Avant cette fonctionnalité, la détection automatique de l'heure ne validait pas l'heure UTC entrante suggérée. Avec cette fonctionnalité, les temps qui s'écoulent avant la limite inférieure sont supprimés.
La valeur 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 se produire avant la création de l'image système. Android n'applique pas de limite supérieure.
Suggestions d'heure GNSS
La source de temps gnss
est nouvelle dans Android 12 et est fournie par des signaux GPS. Il s'agit d'une source fiable pour l'heure lorsque telephony
et network
ne sont pas disponibles.
Cette option est ajoutée au nouveau GnssTimeUpdateService
dans SystemServer, qui écoute passivement les mises à jour de position. Lorsqu'un emplacement valide est reçu, GnssTimeUpdateService
envoie une suggestion à TimeDetectorService
, qui détermine ensuite si l'horloge système doit être mise à jour.
Par défaut, la source de temps gnss
n'est pas activée dans AOSP et doit donc ê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éfinie surtrue
. - Mettez à jour
config_autoTimeSourcesPriority
.gnss
doit être ajouté à la liste des éléments pourconfig_autoTimeSourcesPriority
. La position degnss
dans la liste de priorité détermine la priorité accordée aux suggestions GNSS par rapport aux valeurs provenant d'autres sources.
Impact sur la puissance
GnssTimeUpdateService
écoute passivement les mises à jour de position, ce qui signifie qu'il n'active jamais activement le GPS pour consommer de l'énergie supplémentaire. Par conséquent, l'énergie consommée lorsque la source GNSS est activée est négligeable. Cela signifie également que, sauf si une autre application ou un autre service du système demande activement des mises à jour de position, GnssTimeUpdateService
ne reçoit pas de mise à jour de position et ne suggère pas d'heure GNSS.
Tests
Compatibility Test Suite (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
Consultez 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 des fournisseurs de test avec lesquels vous pouvez spécifier un emplacement et l'heure GNSS associée.
GnssTimeUpdateService
écoute ces mises à jour de position et fait des suggestions périodiquement.
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'heures externes
Les suggestions de temps externes sont un autre moyen de fournir des suggestions de temps automatiques à Android. Ces nouvelles options vous permettent de fournir à Android des suggestions de temps entièrement personnalisées, qui peuvent provenir de divers ECU qui, à leur tour, peuvent utiliser une combinaison d'une horloge en temps réel, de GNSS, de NITZ ou de toute autre source de temps.
Les suggestions suivantes sont disponibles dans Android 12 pour être prises en compte comme suggestions de temps external
:
- Propriétés VHAL. Une nouvelle propriété VHAL nommée
EPOCH_TIME
est fournie. Cette propriété indique le nombre de millisecondes écoulées depuis le 1er janvier 1970 UTC. Sa valeur peut être transmise àTimeManager
Android pour suggérer une nouvelle heure système. Un exemple d'implémentation VHAL qui met à jour cette propriété est fourni dans l'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'heure externe. Si le système est configuré pour prendre en compte les suggestions de temps externes (à l'aide deconfig_autoTimeSourcesPriority
dans le fichier de configuration), le code temporel transmis à cette méthode est utilisé pour définir l'heure système, si aucune suggestion de temps de priorité supérieure n'est disponible.
Vous pouvez implémenter une solution de temps externe comme décrit ci-dessous:
- Mettez à 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>
Android attribue alors la priorité la plus élevée aux suggestions d'heures externes lors de la configuration de l'horloge système. Le matériel du véhicule écrit une suggestion de code temporel dans la nouvelle propriété VHAL
EPOCH_TIME
. - 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.