Détection automatique de l'heure

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é:

  1. Mettez à jour config_enableGnssTimeUpdateService. La valeur de config_enableGnssTimeUpdateService doit être défini sur true.
  2. Mettez à jour config_autoTimeSourcesPriority. gnss doit être ajouté à liste d'articles pour config_autoTimeSourcesPriority. Position de gnss 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 Android TimeManager 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 (via config_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:

  1. Mettre à jour le fichier de configuration des ressources (core/res/res/values/config.xml) puis ajoutez la valeur external à 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.

  2. 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.