Vue d'ensemble de l'heure

Cette page explique comment la détection de l'heure et du fuseau horaire fonctionne sur Android. Cela inclut la façon dont Android détecte automatiquement l'heure et les fuseaux horaires, les options de configuration pour les fabricants d'appareils et les informations sur les tests.

Présentation de l'heure et des fuseaux horaires

Pour déterminer l'heure locale d'un utilisateur à afficher dans des emplacements tels que la barre d'état, Android suit deux états associés, mais indépendants :

  • Heure epoch Unix actuelle
  • Fuseau horaire actuel

L'heure epoch Unix actuelle et le fuseau horaire actuel sont des états à l'échelle de l'appareil, ce qui signifie qu'ils sont partagés par tous les utilisateurs d'un appareil.

Le code temporel actuel de l'epoch Unix n'est pas une valeur fixe. Elle se met à jour automatiquement pour refléter le temps qui passe. En plus du temps qui s'écoule normalement, l'heure Unix actuelle d'un appareil est ajustée si elle s'avère incorrecte, par exemple après une coupure de courant.

Le fuseau horaire actuel détermine l'ajustement à effectuer pour convertir l'heure actuelle de l'epoch Unix en heure locale. Par exemple, en été à Los Angeles, l'appareil soustrait sept heures à l'heure actuelle de l'epoch Unix, et en hiver, il soustrait huit heures.

Pour prendre en charge ces calculs de l'heure locale, tous les appareils Android disposent d'une base de données de toutes les règles de fuseaux horaires mondiaux. Pour en savoir plus sur les règles relatives aux fuseaux horaires, consultez Règles relatives aux fuseaux horaires.

Lorsqu'un utilisateur se rend dans un nouveau lieu qui utilise un autre fuseau horaire, il n'est pas nécessaire d'ajuster l'heure Unix actuelle. Toutefois, l'utilisateur souhaite généralement voir l'heure locale plutôt que celle de son lieu précédent. En modifiant le fuseau horaire actuel, vous vous assurez que le décalage correct est appliqué à l'heure actuelle de l'epoch Unix pour afficher l'heure locale correcte pour le nouvel emplacement.

AOSP permet aux utilisateurs de contrôler indépendamment si l'heure et le fuseau horaire sont définis automatiquement pour eux grâce aux mécanismes suivants.

  • Détection automatique de l'heure : permet de s'assurer que l'appareil dispose de la bonne heure Unix actuelle.
  • Détection automatique du fuseau horaire : permet de s'assurer que l'appareil utilise le fuseau horaire actuel correct.

Détection automatique de l'heure

Cette section présente le service time_detector qui gère la détection automatique de l'heure, les commandes utilisateur, les options de configuration et les détails des tests.

Service time_detector

Le service time_detector, présent sur les appareils exécutant Android 10 ou version ultérieure, gère la détection automatique de l'heure. Il ajuste l'heure Unix actuelle de l'appareil si nécessaire lorsque la détection automatique de l'heure est activée.

Le service time_detector est toujours dans l'un des deux états suivants : certain ou uncertain. L'état certain ou incertain du service est déterminé par les suggestions d'heure qu'il reçoit de différentes sources.

Lorsque le service time_detector est certain, c'est-à-dire qu'il a reçu une suggestion avec des informations sur l'epoch Unix, il remplace l'epoch Unix actuel si la suggestion d'heure est différente de l'epoch Unix actuel.

Lorsque time_detector est incertain, il ne remplace pas l'heure actuelle. L'état incertain signifie généralement que le service time_detector n'a pas reçu de suggestions d'heure. Le service time_detector devient également incertain si les suggestions qu'il a reçues sont considérées comme trop anciennes pour être utilisées. L'âge des suggestions est pris en compte, car les ajustements utilisant d'anciennes suggestions de temps d'époque Unix s'appuient sur l'horloge temps réel écoulé de l'appareil, qui est considérée comme inexacte sur de longues périodes.

Pour établir automatiquement l'heure actuelle de l'epoch Unix, un appareil peut utiliser différentes sources. Dans ce document, elles sont appelées origines. Le service time_detector traite les séquences de suggestions comme distinctes en fonction de leur origine.

Le service time_detector est avec état, ce qui signifie qu'il conserve un enregistrement de la suggestion la plus récente faite par chaque origine. De nouvelles suggestions sont faites à time_detector si une origine dispose d'informations plus récentes sur l'heure Unix. Le service time_detector réévalue les suggestions nouvelles et existantes, et met à jour l'état de l'appareil lorsque des suggestions sont reçues.

Bien que l'heure UTC soit acceptée à l'échelle internationale, il existe plusieurs raisons pour lesquelles il n'est pas toujours simple d'établir l'heure actuelle de l'époque Unix pour un appareil Android :

  • L'heure epoch Unix est un système de chronométrage légèrement différent de l'heure UTC. Pour passer de l'un à l'autre, vous devez savoir quand les secondes intercalaires se produisent et comment elles sont gérées par les origines.
  • Les origines ne sont peut-être disponibles qu'à certaines heures ou dans certaines circonstances. Par exemple, si l'origine nécessite une connectivité réseau, elle ne sera peut-être disponible que lorsque l'appareil est connecté à Internet.
  • Les origines peuvent être inexactes, imprécises ou comporter des erreurs. Par exemple, si une antenne-relais de téléphonie ne suit pas correctement l'heure UTC, l'origine de la téléphonie peut fournir des suggestions d'heure inexactes.
  • Des inexactitudes peuvent être introduites lors de l'obtention de l'heure epoch Unix. Par exemple, un délai réseau, une mise en mémoire tampon ou une planification de processus peuvent entraîner une inexactitude de l'heure de l'epoch Unix.
  • L'horloge de référence utilisée pour ajuster une suggestion en fonction du temps écoulé depuis sa réception peut être inexacte.

Deux origines principales de détection de l'heure sont configurées par défaut dans AOSP :

  • Réseau : utilise les serveurs de temps NTP (Network Time Protocol).
  • Téléphonie : utilise les signaux de téléphonie NITZ (Network Identity and Time Zone).

Les origines téléphoniques et réseau nécessitent une connectivité à des réseaux externes, qui ne sont pas toujours disponibles.

À partir d'Android 12, Android prend également en charge les origines suivantes, qui ne sont pas configurées pour être utilisées par défaut :

  • GNSS : utilise le fournisseur de localisation GPS pour obtenir une heure à partir d'une source GNSS.
  • Externe : origine générique qui permet aux fabricants d'appareils d'intégrer leur propre source d'époque Unix.

Paramètres d'heure

Les utilisateurs peuvent activer la détection automatique de l'heure dans Système > Date et heure de l'application Paramètres AOSP.

Détection automatique de l'heure dans les paramètres

Figure 1 : Détection automatique de l'heure dans les paramètres.

Le tableau suivant décrit les commandes utilisateur pour la détection de l'heure dans l'application Paramètres AOSP.

*Sur Android 11 ou version antérieure, ce paramètre est intitulé Utiliser l'heure fournie par le réseau.

Emplacement des paramètres AOSP Nom des paramètres AOSP Champ d'application Comportement
Système > Date et heure Définir l'heure automatiquement* Tous les utilisateurs

Un bouton bascule.

Lorsque cette option est activée, l'appareil est chargé de détecter l'heure actuelle de l'époque Unix. Lorsque ce paramètre est désactivé, les utilisateurs disposent de commandes pour définir manuellement l'heure de l'appareil.

Lorsque l'utilisateur saisit l'heure manuellement, il saisit son heure locale, et non l'heure Unix. Le temps d'époque Unix actuel est calculé à partir du fuseau horaire actuel.

Configuration

Les fabricants d'appareils peuvent configurer le service time_detector de différentes manières, par exemple en choisissant les origines à utiliser et en définissant la priorité des signaux qu'elles émettent.

Priorisation des origines

À partir d'Android 12, les fabricants d'appareils peuvent modifier le fichier de configuration core/res/res/values/config.xml pour spécifier les origines temporelles à inclure dans la détection automatique de l'heure, ainsi que la priorité avec laquelle time_detector prend en compte ces origines.

Pour les appareils équipés d'Android 11 ou version antérieure, la priorité d'origine est codée en dur sur ["telephony", "network"], ce qui signifie que les suggestions de téléphonie sont prioritaires par rapport aux suggestions de réseau.

La configuration AOSP par défaut est la suivante :

<!-- 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>network</item>
    <item>telephony</item>
</string-array>

Dans Android 12, les suggestions de réseau et de téléphonie sont configurées comme des origines à utiliser par défaut. Les suggestions d'heure réseau sont prioritaires sur les suggestions d'heure de téléphonie. Les fabricants d'appareils peuvent modifier l'ordre des origines pour revenir au comportement d'Android 11 ou version antérieure, où la téléphonie est prioritaire.

Par défaut, 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, l'heure de l'appareil ne sera pas modifiée. Cela permet d'éviter de créer du travail pour les applications installées qui écoutent l'intention ACTION_TIME_CHANGED.

Les valeurs d'origine autorisées sont les suivantes :

Limites de temps autorisées

Android 14 introduit une limite de temps supérieure pour les suggestions d'heure reçues par le service time_detector. Si l'appareil est compatible avec les processus 32 bits, le framework définit une limite de temps supérieure pour empêcher l'appareil d'utiliser une suggestion d'heure qui pourrait déclencher le problème de l'an 2038.

Android 12 a introduit une limite inférieure utilisée pour valider les suggestions d'heure reçues par le service time_detector. La valeur limite inférieure de la période utilisée pour les suggestions automatiques est définie à partir de l'horodatage de la compilation. Cette méthode repose sur le principe qu'une heure valide ne peut pas être antérieure à la date de création de l'image système de l'appareil. Si une suggestion d'heure est antérieure à la limite inférieure, le service time_detector la supprime, car elle ne peut pas être valide si le code temporel de compilation est correct.

Pour les appareils équipés d'Android 11 ou version antérieure, le service time_detector ne valide pas les suggestions de temps Unix epoch entrants.

Débogage et test du temps

Cette section explique comment déboguer et tester le comportement du service time_detector et d'autres composants partagés par toutes les origines.

Interagir avec le service time_detector

Pour afficher la configuration et l'état du service time_detector, utilisez la commande suivante :time_detector

adb shell cmd time_detector dump

Pour afficher d'autres commandes permettant de déboguer et de tester la détection du fuseau horaire, utilisez :

adb shell cmd time_detector help

L'aide décrit également les propriétés du service device_config qui peuvent être utilisées pour affecter le comportement de time_detector pour les tests ou en production. Pour en savoir plus, consultez Configurer un appareil à l'aide du service device_config.

Pour valider la détection automatique de l'heure, les testeurs doivent savoir quelles origines le service time_detector utilise. Voici un exemple de résultat de la commande adb shell cmd time_detector dump, avec les informations sur l'origine et l'état du service actuels en gras :

$ adb shell cmd time_detector dump

TimeDetectorStrategy:
  mLastAutoSystemClockTimeSet=null
  mEnvironment.isAutoTimeDetectionEnabled()=true
  mEnvironment.elapsedRealtimeMillis()=23717241
  mEnvironment.systemClockMillis()=1626707861336
  mEnvironment.systemClockUpdateThresholdMillis()=2000
  mEnvironment.autoTimeLowerBound()=2021-07-19T07:48:05Z(1626680885000)
  mEnvironment.autoOriginPriorities()=[network,telephony]
  Time change log:
    ...
  Telephony suggestion history:
    ...
  Network suggestion history:
    ...
  Gnss suggestion history:
    ...
  External suggestion history:
    ...

Voici comment interpréter ces informations :

Clé Valeur
mEnvironment.isAutoTimeDetectionEnabled() Indique si la détection automatique de l'heure est activée.
mEnvironment.autoTimeLowerBound() Limite inférieure actuelle utilisée pour valider les suggestions d'heure.
mEnvironment.autoOriginPriorities() Les origines utilisées et l'ordre de priorité.

Le journal des modifications de l'heure indique les cas où le service time_detector a modifié l'heure actuelle de l'epoch Unix de l'appareil.

Les informations de l'historique des suggestions indiquent les suggestions qui ont été faites par chaque origine.

Détection automatique du fuseau horaire

Cette section présente le service time_zone_detector qui gère la détection automatique du fuseau horaire, les commandes utilisateur dans les paramètres, la détection du fuseau horaire par téléphonie et par localisation, ainsi que les détails des tests.

Service time_zone_detector

Le service time_zone_detector, présent sur les appareils équipés d'Android 11 ou version ultérieure, gère la détection automatique du fuseau horaire. Il ajuste le fuseau horaire actuel de l'appareil si nécessaire lorsque la détection automatique du fuseau horaire est activée.

Lorsque la détection automatique du fuseau horaire est activée, time_zone_detector peut être dans l'un des deux états suivants : certain et uncertain.

Lorsque le service time_zone_detector est dans un certain état, cela signifie qu'il a reçu des informations précises sur le fuseau horaire, ce qui peut l'amener à remplacer le fuseau horaire actuel.time_zone_detector Lorsque la réponse est incertaine, cela signifie que le modèle n'a reçu aucune information ou seulement des informations peu fiables. Il ne remplacera donc pas le fuseau horaire actuel.

Certains états du service time_zone_detector peuvent inclure des états dans lesquels time_zone_detector ne dispose d'aucune information de fuseau horaire à utiliser ou dans lesquels il doit choisir entre plusieurs fuseaux horaires. Voici les différents états :

  • Un état spécifique sans fuseau horaire est défini lorsque l'appareil se trouve dans un endroit sans fuseau horaire, comme dans les eaux internationales ou dans une zone contestée. Cet état est semblable à un état incertain, mais indique que time_zone_detector n'a pas besoin d'effectuer d'autres actions pour essayer de déterminer le fuseau horaire.
  • Un état donné avec plusieurs fuseaux horaires est saisi en cas d'ambiguïté ou de conditions limites. Dans cet état, si le fuseau horaire actuel fait partie de ceux dont time_zone_detector est sûr, il est conservé. Sinon, l'un des fuseaux horaires disponibles est utilisé. Cela donne à time_zone_detector un élément de persistance si l'utilisateur a précédemment sélectionné manuellement son fuseau horaire ou si l'appareil approche d'une frontière.

L'état certain ou incertain du service time_zone_detector est déterminé par les suggestions de fuseaux horaires envoyées par un algorithme.

En général, les suggestions se présentent sous deux types qui correspondent étroitement aux états possibles de time_zone_detector : certain et uncertain. Voici des exemples de types de suggestions :

  • type = uncertain, zoneIds = []

    • L'algorithme ne connaît pas le fuseau horaire.
  • type = certain, zoneIds = ["Europe/London"]

    • L'algorithme est certain que le fuseau horaire est Europe/Londres.
  • type = certain, zoneIds = []`

    • L'algorithme est certain, mais aucun ID de zone n'est associé à l'emplacement actuel.
  • type = certain, zoneIds = ["America/Denver", "America/Phoenix"]

    • L'algorithme est certain que la réponse se trouve dans l'une des deux zones, mais ne peut pas choisir entre America/Denver et America/Phoenix.

Le service time_zone_detector traite les séquences de suggestions comme distinctes en fonction de leur algorithme. Selon l'algorithme, les suggestions peuvent également contenir des métadonnées indiquant le degré de certitude de l'algorithme.

Le service time_zone_detector est avec état, ce qui signifie qu'il conserve un enregistrement de la suggestion la plus récente faite par chaque algorithme. De nouvelles suggestions sont envoyées au service time_zone_detector si une suggestion précédente n'est plus correcte, c'est-à-dire si un algorithme a maintenant une suggestion différente ou s'il n'est plus en mesure de détecter le fuseau horaire. Le service time_zone_detector réévalue les suggestions nouvelles et existantes, et met à jour l'état de l'appareil lorsque des suggestions sont reçues.

Android prend en charge deux algorithmes pour la détection du fuseau horaire :

  • Téléphonie
  • Position

Le service time_zone_detector utilise généralement un seul algorithme pour déterminer le fuseau horaire. Lorsqu'un appareil est compatible avec l'algorithme de localisation, l'algorithme utilisé par l'appareil est déterminé en fonction des paramètres de fuseau horaire configurés par l'utilisateur. Lorsque l'algorithme utilisé n'est pas sûr du fuseau horaire, time_zone_detector n'utilise généralement pas les suggestions d'un autre algorithme. Les suggestions associées à des algorithmes qui ne sont pas utilisés peuvent être conservées en mémoire par time_zone_detector, mais elles ne sont pas utilisées, sauf si l'algorithme change. Lorsque l'utilisateur modifie les paramètres de détection automatique du fuseau horaire et que l'algorithme change, la suggestion la plus récente disponible pour le nouvel algorithme est utilisée.

Pour en savoir plus sur le cas où plusieurs algorithmes sont utilisés pour déterminer le fuseau horaire, consultez Mode de secours de la téléphonie.

Mode de secours de la téléphonie

Sur les appareils équipés d'Android 13 ou version ultérieure, le service time_zone_detector est compatible avec le mode de secours de téléphonie. Ce mode permet à Android d'utiliser temporairement les suggestions de détection de téléphonie dans les situations où la détection de la position ne parvient pas à détecter le fuseau horaire ou prend plus de temps que la détection de téléphonie.

Le mode de secours de téléphonie s'applique aux appareils compatibles avec la téléphonie et la détection de la position, et pour lesquels l'utilisateur a activé l'option Utiliser la position pour définir le fuseau horaire dans les paramètres de fuseau horaire. Le mode est activé automatiquement lorsqu'un appareil est redémarré et lorsque le mode Avion est désactivé.

Dans Android 14 et versions ultérieures, le mode secours de téléphonie peut être déclenché par le biais des API d'état LTZP. Autrement dit, si un LTZP indique qu'il est incertain et que sa capacité à détecter la position ou le fuseau horaire est dégradée par son environnement, le mode secours de téléphonie est déclenché.

En mode de secours de téléphonie, le service time_zone_detector utilise les suggestions de téléphonie comme si la détection de la position était désactivée jusqu'à ce que l'algorithme de localisation fasse une certaine suggestion. Une fois une suggestion reçue, le mode de secours de téléphonie est désactivé et les suggestions de localisation sont utilisées exclusivement.

Pour en savoir plus sur la configuration du mode de secours téléphonique, consultez Configuration de la détection du fuseau horaire.

Paramètres de fuseau horaire

Les utilisateurs peuvent activer et configurer les paramètres de détection automatique du fuseau horaire dans l'application Paramètres AOSP.

Détection automatique du fuseau horaire dans les paramètres

Figure 2. Détection automatique du fuseau horaire dans les paramètres.

Le tableau suivant décrit les commandes utilisateur pour la détection du fuseau horaire dans l'application Paramètres AOSP.

*Sur Android 11 ou version antérieure, ce paramètre est intitulé Utiliser le fuseau horaire fourni par le réseau.

Emplacement des paramètres AOSP Nom des paramètres AOSP Champ d'application Comportement
Système > Date et heure Définir le fuseau horaire automatiquement* Tous les utilisateurs

Un bouton bascule.

Lorsque cette option est activée, l'appareil est responsable de la détection du fuseau horaire actuel. Lorsque ce paramètre est désactivé, les utilisateurs disposent de commandes pour définir manuellement le fuseau horaire de l'appareil.

Système > Date et heure Utiliser la position pour définir le fuseau horaire Utilisateur actuel

Un bouton bascule.

Disponible à partir d'Android 12. Ce bouton bascule ne s'affiche que si la détection du fuseau horaire basée sur la position est compatible avec l'appareil.

Pour en savoir plus sur les modifications apportées dans Android 14, consultez Appareils compatibles uniquement avec la détection du fuseau horaire en fonction de la position.

Localisation Utiliser ma position Utilisateur actuel

Un bouton bascule.

Autorise ou empêche l'utilisation de la position de l'appareil en général. Cette valeur est pertinente si la détection du fuseau horaire basée sur la position est prise en charge sur l'appareil.

Vous trouverez ci-dessous un aperçu du comportement de l'appareil pour la détection du fuseau horaire en fonction des paramètres choisis par l'utilisateur :

  • [Date et heure] Définir le fuseau horaire automatiquement : DÉSACTIVÉ

    • L'utilisateur doit sélectionner manuellement le fuseau horaire.
  • [Date et heure] Définir le fuseau horaire automatiquement : ACTIVÉ

    • [Position] Utiliser la position : DÉSACTIVÉ

      • Les signaux de téléphonie sont utilisés pour détecter le fuseau horaire.
    • [Position] Utiliser la position : ACTIVÉ

      • [Date et heure] Utiliser la position pour définir le fuseau horaire : ACTIVÉ

        • La position est utilisée pour détecter le fuseau horaire.
      • [Date et heure] Utiliser la position pour définir le fuseau horaire : DÉSACTIVÉ

        • Les signaux de téléphonie sont utilisés pour détecter le fuseau horaire.

Plusieurs appareils utilisateur

Étant donné que plusieurs des paramètres impliqués sont limités à l'utilisateur actuel, le comportement de détection du fuseau horaire d'un appareil peut changer lorsque l'utilisateur actuel change sur un appareil Android multi-utilisateur.

L'option Utiliser la position pour définir le fuseau horaire est limitée à l'utilisateur actuel et n'est pas restreinte par la règle de l'appareil. Cela signifie que les utilisateurs peuvent toujours modifier sa valeur, même lorsque l'option Définir automatiquement le fuseau horaire est désactivée ou si d'autres commandes de date et d'heure ou de fuseau horaire sont restreintes par le contrôleur de règles de l'appareil.

 Appareils compatibles uniquement avec l'algorithme de détection du fuseau horaire basé sur la position

Cette section décrit le comportement des appareils qui ne prennent en charge que l'algorithme de localisation.

  • Android 14 ou version ultérieure

    • L'option Utiliser la position n'est pas affichée aux utilisateurs dans l'application Paramètres AOSP, et l'appareil se comporte comme si l'option Utiliser la position était activée.
    • La valeur du paramètre SettingsProvider location_time_zone_detection_enabled de portée utilisateur est ignorée. Cette valeur enregistre les préférences de l'utilisateur sur d'autres types d'appareils.
  • Android 12 ou Android 13

    • L'option Utiliser la position est visible par les utilisateurs dans l'application Paramètres AOSP, et ils peuvent la désactiver. Si l'option est désactivée, l'appareil ne détecte pas automatiquement le fuseau horaire.

Comportement lors du passage à la détection automatique et inversement

Lorsque l'utilisateur passe de la détection manuelle à la détection automatique du fuseau horaire, time_zone_detector peut déjà être certain du fuseau horaire actuel. Si tel est le cas, lorsque l'utilisateur active la détection automatique, le fuseau horaire de l'appareil peut être modifié en même temps pour correspondre à l'avis du service time_zone_detector.

De même, lorsque l'utilisateur modifie des paramètres qui entraînent une modification de l'algorithme actuel du service time_zone_detector, il est possible que time_zone_detector ait déjà reçu des suggestions pour le nouvel algorithme. L'heure de l'appareil peut donc être immédiatement modifiée pour correspondre à l'avis du service time_zone_detector.

Détection du fuseau horaire de la téléphonie

La détection du fuseau horaire de la téléphonie utilise les signaux de téléphonie pour déterminer le fuseau horaire actuel. Pour en savoir plus, consultez Détection du fuseau horaire de la téléphonie.

Détection du fuseau horaire basée sur la position

La détection du fuseau horaire basée sur la position est disponible sur Android 12 ou version ultérieure. Il s'agit d'une fonctionnalité optionnelle de détection automatique du fuseau horaire qui permet aux appareils d'utiliser leur position pour déterminer le fuseau horaire actuel.

Le service location_time_zone_manager, introduit dans Android 12, s'exécute dans le serveur système et contient le code responsable de l'envoi de suggestions d'algorithmes de localisation au service time_zone_detector. Pour en savoir plus, consultez Détection du fuseau horaire en fonction de la position.

Points à prendre en compte concernant l'adoption des fonctionnalités

Cette section décrit les aspects de la fonctionnalité de détection du fuseau horaire en fonction de la position géographique pour aider un fabricant d'appareils à déterminer s'il doit l'adopter sur un appareil.

Comparer la téléphonie et la détection de la position

Le tableau suivant compare les avantages et les inconvénients de l'utilisation des signaux de localisation plutôt que des signaux de téléphonie pour la détection du fuseau horaire.

Catégorie Détection de la téléphonie Détection de la position
Exactitude La somme varie selon les pays.

Dépend de la disponibilité et de l'exactitude du code pays du mobile et de l'heure locale.
Dépend de la configuration de la fonctionnalité ou des composants du plug-in.

La justesse varie généralement en fonction des éléments suivants :
  • Précision et régularité du fournisseur de localisation.
  • La qualité des données de la carte des fuseaux horaires.
Facilité de mise à jour La détection de la téléphonie repose sur des fichiers contenus dans le module de données de fuseau horaire (com.android.tzdata APEX) pouvant être mis à jour. Dépend de la configuration de la fonctionnalité ou des composants du plug-in.

La possibilité de mise à jour dépend généralement du fait que l'appareil utilise des données de cartographie des fuseaux horaires côté serveur ou côté client.

Les données de la carte des fuseaux horaires ne sont pas incluses dans le module de données des fuseaux horaires utilisé pour mettre à jour la copie TZDB d'Android et d'autres informations sur les fuseaux horaires.

Les fabricants d'appareils doivent également tenir compte de la cohérence des versions entre les règles de fuseau horaire et les données de la carte des fuseaux horaires.
Consommation d'énergie Consommation d'énergie nulle ou faible Cela dépend des paramètres de localisation de l'utilisateur, des plug-ins utilisés et, en général, des autres applications qui demandent la localisation.
Disponibilité Appareils de téléphonie uniquement. Nécessite généralement une carte SIM fonctionnelle. La détection de la position dépend des fournisseurs de localisation disponibles.
Confidentialité des utilisateurs

Le fuseau horaire préféré d'un utilisateur est généralement déterminé par sa position géographique. La localisation est une donnée sensible. Les utilisateurs peuvent s'inquiéter de la possibilité que leur position soit partagée dans le cadre de la détection du fuseau horaire. Sans rapport avec la détection du fuseau horaire, toutes les applications exécutées sur un appareil peuvent lire le fuseau horaire actuel de l'appareil sans nécessiter d'autorisation Android. Les applications peuvent déduire une idée imprécise de la position de l'appareil à partir de ces informations.

Plus précisément, la détection du fuseau horaire peut fonctionner de manière passive ou active :

  • Passif : un élément de l'environnement de l'appareil indique à celui-ci le fuseau horaire à utiliser dans cet environnement.
  • Active : l'appareil doit déterminer lui-même le fuseau horaire. Pour ce faire, il obtient la position de l'appareil en fonction des paramètres de confidentialité des utilisateurs et de leur consentement. Il peut ensuite partager sa position avec des services externes. Consultez la discussion ci-dessous pour en savoir plus sur la confidentialité et le consentement des utilisateurs.

La détection passive, comme avec l'algorithme de téléphonie, n'a aucune implication supplémentaire en termes de confidentialité pour les utilisateurs.

La détection active, comme avec l'algorithme de localisation, consiste à déterminer la position de l'appareil, ce que les utilisateurs ne souhaitent pas forcément accepter. La position peut être envoyée sur un réseau afin de déterminer l'ID du fuseau horaire.

L'approche d'Android concernant la confidentialité des utilisateurs pour la détection du fuseau horaire permet à l'utilisateur de désactiver individuellement les algorithmes qui sont censés être actifs. De plus, le code de la plate-forme AOSP ne traite pas directement de la localisation elle-même : la détection de la localisation et le mappage de la localisation aux ID de fuseaux horaires sont laissés aux composants plug-in configurés par les fabricants d'appareils.

Pour en savoir plus sur les fonctionnalités de confidentialité des utilisateurs, consultez Détection du fuseau horaire de la position.

Configuration

Les fabricants d'appareils peuvent configurer le service time_zone_detector pour modifier son comportement. Cette section décrit les options de configuration pour le comportement général du service time_zone_detector. Pour en savoir plus sur la configuration des algorithmes de détection du fuseau horaire et de la téléphonie, consultez Détection du fuseau horaire de la téléphonie et Détection du fuseau horaire de la localisation.

La configuration AOSP de base se trouve à l'adresse frameworks/base/core/res/res/values/config.xml.

Clé de configuration Valeur AOSP Description
config_supportTelephonyTimeZoneFallback true Lorsque true, time_zone_detector utilise le mode de secours de téléphonie. Cette fonctionnalité est disponible sur Android 13 et versions ultérieures.

 Modification du comportement par défaut de l'appareil

Dans AOSP, la détection automatique du fuseau horaire est activée par défaut, avec le paramètre auto_time_zone défini sur true. Pour désactiver la détection automatique de l'heure par défaut, définissez la valeur de def_auto_time_zone définie dans frameworks/base/packages/SettingsProvider/res/values/defaults.xml sur false.

Lorsque vous restaurez une sauvegarde à partir d'un autre appareil, le framework met à jour la valeur du paramètre auto_time_zone par défaut. Si vous souhaitez vous assurer que ce paramètre n'est pas restauré à partir d'une sauvegarde, incluez auto_time_zone dans le tableau restore_blocked_global_settings défini dans frameworks/base/packages/SettingsProvider/res/values/blocked_settings.xml.

Débogage et test du fuseau horaire

Cette section explique comment déboguer et tester le comportement du service time_zone_detector et d'autres composants partagés par tous les algorithmes.

Configurer un appareil à l'aide du service device_config

Le service device_config est un mécanisme utilisé sur Android pour configurer un comportement modifiable à l'aide de valeurs généralement extraites d'un serveur distant par un code propriétaire (non-AOSP). Lorsque vous utilisez des valeurs device_config pour les tests, en particulier lors de tests manuels de longue durée, l'appareil peut synchroniser les indicateurs, ce qui les réinitialise et efface les valeurs définies pour les tests.

Dans Android 12 ou version ultérieure, pour empêcher temporairement la synchronisation des indicateurs, utilisez :

adb shell cmd device_config set_sync_disabled_for_tests persistent

Pour restaurer la synchronisation des indicateurs après les tests, utilisez la commande suivante :

adb shell cmd device_config set_sync_disabled_for_tests none

Après avoir restauré la synchronisation des indicateurs, redémarrez l'appareil.

Pour en savoir plus, utilisez $ adb shell cmd device_config help.

Interagir avec le service time_zone_detector

Pour afficher la configuration et l'état du service time_zone_detector, utilisez la commande suivante :time_zone_detector

adb shell cmd time_zone_detector dump

Pour afficher d'autres commandes permettant de déboguer et de tester la détection du fuseau horaire, utilisez :

adb shell cmd time_zone_detector help

L'aide décrit également les propriétés de service device_config qui peuvent être utilisées pour affecter le comportement du service time_zone_detector pour les tests ou en production. Pour en savoir plus, consultez Configurer un appareil à l'aide du service device_config.

Pour valider la détection du fuseau horaire, les testeurs doivent savoir quel algorithme time_zone_detector utilise. Pour comprendre et influencer l'algorithme actuel de time_zone_detector, utilisez l'une des options suivantes :

  • Vérifiez visuellement l'interface utilisateur des paramètres. Pour en savoir plus, consultez Paramètres de fuseau horaire.
  • Utilisez la ligne de commande via adb :

    • Pour vider l'état time_zone_detector, utilisez adb shell cmd time_zone_detector dump.
    • Pour modifier les paramètres de l'appareil, utilisez d'autres commandes time_zone_detector. Pour en savoir plus, utilisez adb shell cmd time_zone_detector help.

Voici un exemple de résultat de la commande adb shell cmd time_zone_detector dump, avec les informations sur l'algorithme actuel et l'état du service en gras :

$ adb shell cmd time_zone_detector dump
TimeZoneDetectorStrategy:
  mEnvironment.getCurrentUserId()=0
  mEnvironment.getConfiguration(currentUserId)=ConfigurationInternal{mUserId=0, mUserConfigAllowed=true, mTelephonyDetectionSupported=true, mGeoDetectionSupported=true, mAutoDetectionEnabled=true, mLocationEnabled=true, mGeoDetectionEnabled=true}
  [Capabilities=TimeZoneCapabilitiesAndConfig{mCapabilities=TimeZoneDetectorCapabilities{mUserHandle=UserHandle{0}, mConfigureAutoDetectionEnabledCapability=40, mConfigureGeoDetectionEnabledCapability=40, mSuggestManualTimeZoneCapability=30}, mConfiguration=TimeZoneConfiguration{mBundle=Bundle[{geoDetectionEnabled=true, autoDetectionEnabled=true}]}}]
  mEnvironment.isDeviceTimeZoneInitialized()=true
  mEnvironment.getDeviceTimeZone()=Europe/London
  Time zone change log:
  Manual suggestion history:
...
  Geolocation suggestion history:
...
  Telephony suggestion history:
...

Voici comment interpréter ces informations :

Clé Valeur
mUserConfigAllowed Indique si l'utilisateur est empêché de contrôler les paramètres de date et d'heure par le contrôleur de règles de l'appareil.
mTelephonyDetectionSupported Indique si l'appareil est équipé de la détection du fuseau horaire par téléphonie.
mGeoDetectionSupported Indique si l'appareil est compatible avec la détection du fuseau horaire basée sur la position. Il s'agit de l'état effectif basé sur la configuration et la présence d'au moins une LTZP.
mAutoDetectionEnabled Indique si la détection automatique du fuseau horaire est activée.
mLocationEnabled Bouton principal d'activation/désactivation de la localisation.
mGeoDetectionEnabled Le commutateur d'algorithme : false indique l'algorithme de téléphonie, et true indique l'algorithme de localisation.

Les informations de l'historique des suggestions indiquent les suggestions qui ont été faites dans les paramètres (manuellement) et par les algorithmes de téléphonie et de localisation.