La détection automatique de l'heure reçoit des suggestions d'heure de différentes sources, sélectionne la meilleure option, puis définit l'horloge système dans Android en conséquence. Les versions précédentes d'Android offraient deux façons de définir la date et l'heure : manuellement par utilisateur ou par détection automatique de l'heure, et définies par l'une de ces options :
telephonyutilise les signaux de téléphonie NITZ (Network Identity and Time Zone).networkutilise les 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 peuvent ne pas disposer de téléphonie intégrée. Par conséquent, l'heure GNSS (Global Satellite Navigation Systems) est fournie comme source d'heure système à utiliser lorsque la connectivité réseau n'est pas disponible.
Cette prochaine version d'Android offre deux options supplémentaires pour détecter et définir automatiquement l'heure :
gnssutilise les systèmes de navigation par satellite mondiaux (GNSS).externalutilise 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 heure > Date et heure automatiques :

Figure 1. Sélectionnez Date et heure automatiques
Configurer les sources de temps
Pour spécifier les sources de temps à inclure dans la détection automatique de l'heure 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 d'une source de priorité plus élevée sont ignorées si elles sont invalides ou trop anciennes. De plus, si la suggestion valide de priorité la plus élevée correspond à l'heure actuelle de l'horloge système de l'appareil à quelques secondes près (la valeur par défaut est de deux (2) secondes), l'heure ne sera pas modifiée.
Limite inférieure de temps
Android 12 fournit une nouvelle limite inférieure de temps à utiliser lors de la validation des suggestions d'heure. Avant cette fonctionnalité, la détection automatique de l'heure ne validait pas l'heure UTC entrante suggérée. Avec cette fonctionnalité, les heures qui s'écoulent avant la limite inférieure sont ignorées.
La valeur de la limite inférieure est déterminée à partir d'une date dérivée du code temporel de compilation. Cela repose 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 les signaux GPS. Il s'agit d'une source d'heure fiable 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 la position. Lorsqu'une position valide est reçue, GnssTimeUpdateService fait 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é, procédez comme suit :
- Mettez à jour
config_enableGnssTimeUpdateService. La valeur deconfig_enableGnssTimeUpdateServicedoit être définie surtrue. - Mettez à jour
config_autoTimeSourcesPriority.gnssdoit être ajouté à la liste d'éléments pourconfig_autoTimeSourcesPriority. La position degnssdans la liste de priorité 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, ce qui signifie qu'il n'active jamais activement le GPS pour consommer de l'énergie supplémentaire. Par conséquent, la consommation d'énergie lorsque la source GNSS est activée est négligeable. Cela signifie également qu'à moins qu'une autre application ou un autre service du système ne demande activement des mises à jour de la position, GnssTimeUpdateService ne reçoit pas de mise à jour de la position et ne suggère pas d'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
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 une position et l'heure GNSS associée.
GnssTimeUpdateService écoute ces mises à jour de la position et fait régulièrement 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'heure externes
Les suggestions d'heure externes sont une autre façon de fournir des suggestions d'heure automatiques à Android. Cette nouvelle option vous permet de fournir des suggestions d'heure entièrement personnalisées à Android, qui peuvent provenir de différents ECU qui, à leur tour, peuvent utiliser une combinaison d'une horloge en temps réel, d'un GNSS, d'un NITZ ou de toute autre source de temps.
Les suggestions suivantes sont disponibles dans Android 12 et peuvent être considérées comme des suggestions d'heure external
:
- Propriétés VHAL. Une nouvelle
propriété VHAL
nommée
EPOCH_TIMEest fournie. Cette propriété indique le nombre de millisecondes écoulées depuis le 1er janvier 1970 UTC. Sa valeur peut être transmise à l' AndroidTimeManagerpour suggérer une nouvelle heure système. Un exemple d'implémentation VHAL qui met à jour cette propriété est fourni sur la page d'implémentation de référence. - 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 d'heure externes (à l'aide deconfig_autoTimeSourcesPrioritydans le fichier de configuration), le code temporel transmis à cette méthode est utilisé pour définir l'heure système, si aucune suggestion d'heure de priorité supérieure n'est disponible.
Vous pouvez implémenter une solution d'heure 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 est ainsi configuré pour accorder la priorité la plus élevée aux suggestions d'heure externes lors de la définition de l'horloge système. Le matériel du véhicule écrit une suggestion de code temporel dans la nouvelle
EPOCH_TIMEproprié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.