Vue d'ensemble de l'heure

Cette page décrit le fonctionnement de la détection de l'heure et du fuseau horaire sur Android. Cela inclut la manière dont Android détecte automatiquement l'heure et les fuseaux horaires, les options de configuration pour les fabricants d'appareils et les informations de test.

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 liés, mais indépendants :

  • L'heure actuelle de l'epoch Unix
  • Fuseau horaire actuel

L'heure 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.

L'heure actuelle de l'epoch Unix n'est pas une valeur fixe. Elle se met à jour automatiquement pour refléter le passage du temps. En plus du passage normal, l'heure de l'epoch Unix actuelle d'un appareil est ajustée si elle s'avère incorrecte, par exemple après la mise hors tension d'un appareil.

Le fuseau horaire actuel détermine l'ajustement à effectuer pour convertir l'heure Unix actuelle en heure locale. Par exemple, pendant l'été à Los Angeles, l'appareil soustrait 7 heures à l'heure d'époque Unix actuelle et 8 heures en hiver.

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 fuseau horaire mondial. Pour en savoir plus sur les règles de fuseau horaire, consultez la section Règles de fuseau horaire.

Lorsqu'un utilisateur se rend dans un nouvel emplacement qui utilise un autre fuseau horaire, l'heure Unix actuelle n'a pas besoin d'être ajustée, mais l'utilisateur souhaite généralement voir l'heure locale plutôt que l'heure de son emplacement précédent. La modification du fuseau horaire actuel garantit que le décalage correct est appliqué à l'heure de l'epoch Unix actuelle pour afficher l'heure locale correcte du nouvel emplacement.

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

  • Détection automatique de l'heure : permet de s'assurer que l'appareil dispose de l'heure Unix actuelle correcte.
  • Détection automatique des fuseaux horaires : 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.

Le service time_detector

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

Le service time_detector présente toujours l'un des deux états suivants: uncertain ou certain. L'état certain ou incertain du service est déterminé par les suggestions de temps 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 actuelle si la suggestion d'heure est différente de l'epoch Unix actuelle.

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'horaires. Le service time_detector ne sait pas non plus 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 d'heure d'époque Unix reposent sur l'horloge en temps réel écoulée de l'appareil, qui est supposée être inexacte sur de longues périodes.

Pour établir automatiquement l'heure Unix actuelle, un appareil peut utiliser différentes sources. Dans ce document, ils sont appelés 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 envoyées à time_detector si des informations plus récentes sur l'époque Unix sont disponibles pour une origine. 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 convenue au niveau international, plusieurs raisons peuvent expliquer pourquoi il n'est pas toujours simple de définir l'heure actuelle de l'epoch Unix sur un appareil Android:

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

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

  • Réseau:utilise des 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 de téléphonie et de réseau nécessitent une connectivité aux réseaux externes, qui ne sont pas toujours disponibles.

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

  • GNSS : utilise le fournisseur de position 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 en sélectionnant System > Date and Time (Système > Date et heure) dans 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 du temps 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

Bouton d'activation

Lorsque l'option est activée, l'appareil est chargé de détecter l'heure actuelle de l'epoch Unix. Lorsqu'elle est désactivée, les utilisateurs disposent de commandes permettant de définir l'heure de l'appareil manuellement.

Lorsque l'utilisateur saisit l'heure manuellement, il saisit l'heure locale, et non l'heure Unix. L'heure actuelle de l'epoch Unix est calculée en utilisant le fuseau horaire actuel pour obtenir une heure de l'époque Unix.

Configuration

Les fabricants d'appareils peuvent configurer le service time_detector de différentes manières, par exemple en indiquant les origines à utiliser et la manière de hiérarchiser leurs signaux.

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 et la priorité avec laquelle time_detector tient compte de ces origines.

Pour les appareils équipés d'Android 11 ou version antérieure, la priorité de l'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éseaux.

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>

Sous Android 12, les suggestions de réseau et de téléphonie sont configurées comme origines à utiliser par défaut. Les suggestions d'horaire réseau sont prioritaires sur les suggestions d'horaires 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 reçoit une priorité plus élevée.

Par défaut, 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, l'heure de l'appareil ne change pas. Cela permet d'éviter de créer du travail pour les applications installées qui écoutent l'intent 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 de temps 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 maximale pour l'empêcher d'utiliser une suggestion d'heure susceptible de déclencher le problème Y2038.

Android 12 a introduit une limite de temps inférieure permettant de valider les suggestions d'heure reçues par le service time_detector. La valeur inférieure de la limite temporelle utilisée pour les suggestions automatiques est définie à partir du code temporel de compilation. Cela fonctionne selon le principe qu'une heure valide ne peut pas être antérieure à la 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 ignore la suggestion, 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 entrantes d'heures d'epoch Unix.

Débogage et test du temps

Cette section explique comment déboguer et tester le comportement du service time_detector et des 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, exécutez la commande suivante :time_detector

adb shell cmd time_detector dump

Pour afficher des commandes supplémentaires permettant de déboguer et de tester la détection du fuseau horaire, utilisez:

adb shell cmd time_detector help

La sortie d'aide décrit également les propriétés de service device_config qui peuvent être utilisées pour influer sur le comportement de time_detector à des fins de test ou en production. Pour en savoir plus, consultez la section Configurer un appareil à l'aide du service device_config.

Pour valider la détection automatique de l'heure, les testeurs doivent connaître les origines utilisées par le service time_detector. 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:
    ...

Ces informations peuvent être interprétées comme suit:

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'horaires.
mEnvironment.autoOriginPriorities() Origines utilisées et ordre de priorité.

Le journal des modifications de l'heure indique les moments 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é effectuées par chaque origine.

Détection automatique des fuseaux horaires

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 de téléphonie et de localisation, ainsi que les détails des tests.

Le 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 de la zone 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 avoir l'un des deux états suivants: uncertain et certain.

Lorsque le service time_zone_detector est dans un certain état, cela signifie que le service time_zone_detector a reçu des informations fortes sur le fuseau horaire, ce qui peut entraîner le remplacement du fuseau horaire actuel. Lorsqu'il est incertain, cela signifie qu'il n'a reçu aucune information ou seulement des informations peu fiables, ce qui signifie qu'il ne remplacera pas le fuseau horaire actuel.

Certains états du service time_zone_detector peuvent inclure ceux pour lesquels time_zone_detector n'a aucune information de fuseau horaire à utiliser ou pour lesquels il dispose de plusieurs fuseaux horaires. Ces états sont les suivants:

  • Un État spécifique avec zéro fuseau horaire est saisi lorsque l'appareil se trouve quelque part sans fuseau horaire, par exemple 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 avec plusieurs fuseaux horaires est saisi en cas d'ambiguïté ou de conditions frontalières. Dans cet état, si le fuseau horaire actuel est l'un des fuseaux horaires dont time_zone_detector est certain, le fuseau horaire actuel est laissé tel quel. Sinon, l'un des fuseaux horaires disponibles est utilisé. Cela donne à time_zone_detector un élément de rémanence si l'utilisateur a précédemment sélectionné manuellement son fuseau horaire ou si l'appareil s'approche d'une bordure.

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

En général, les suggestions se présentent sous deux formes qui correspondent étroitement aux états possibles de time_zone_detector : certain et incertain. 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 la zone 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 est 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 niveau de certitude de l'algorithme.

Le service time_zone_detector est basé sur l'é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 propose désormais une suggestion différente ou s'il a perdu la capacité 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 lorsqu'il en reçoit.

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. Lorsque l'algorithme de localisation est compatible avec un appareil, celui-ci est déterminé en fonction des paramètres de fuseau horaire configurés par l'utilisateur. Lorsque l'algorithme utilisé n'est plus 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 utilisées que 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 la situation où plusieurs algorithmes sont utilisés pour déterminer le fuseau horaire, consultez la section Mode de remplacement de la téléphonie.

Mode de remplacement 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 remplacement de la téléphonie. Ce mode permet à Android d'utiliser temporairement les suggestions de détection téléphonique lorsque la détection de la position ne parvient pas à détecter le fuseau horaire ou que la détection de la position met plus de temps à détecter le fuseau horaire que la détection téléphonique.

Le mode de remplacement de la téléphonie s'applique aux appareils où la téléphonie et la détection de position sont prises en charge, et où l'utilisateur a activé 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é.

Sous Android 14 et versions ultérieures, le basculement vers la téléphonie peut être déclenché via les API de signalement de l'état du 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 de basculement vers la téléphonie est déclenché.

En mode de remplacement par téléphonie, le service time_zone_detector utilise les suggestions de téléphonie comme si la détection de position était désactivée jusqu'à ce que l'algorithme de localisation propose une suggestion. Après avoir reçu une suggestion spécifique, le mode de remplacement pour la téléphonie est désactivé et les suggestions d'emplacements sont utilisées exclusivement.

Pour en savoir plus sur la configuration du mode de secours pour la téléphonie, consultez la section 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 d'AOSP.

Détection automatique des fuseaux horaires 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

Bouton d'activation

Lorsqu'il est activé, l'appareil est chargé de détecter le fuseau horaire actuel. Lorsque cette option est désactivée, 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

Bouton d'activation

Disponible à partir d'Android 12. Ce bouton bascule ne s'affiche que lorsque 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 par Android 14, consultez la section Appareils compatibles uniquement avec la détection du fuseau horaire de la position.

Localisation Utiliser ma position Utilisateur actuel

Un bouton d'activation/de désactivation.

Autorise ou interdit l'utilisation de la position de l'appareil de manière générale. La valeur est pertinente si la détection du fuseau horaire basée sur la position est compatible avec l'appareil.

Vous trouverez ci-dessous un aperçu du comportement des appareils 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.
    • [Location] Utiliser la position:ACTIVÉE

      • [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 permettent de détecter le fuseau horaire.

Appareils multi-utilisateurs

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

Le bouton bascule Utiliser la position pour définir le fuseau horaire est limité à l'utilisateur actuel et n'est pas limité par la stratégie de l'appareil. Cela signifie que les utilisateurs peuvent toujours modifier sa valeur, même lorsque le bouton bascule Définir le fuseau horaire automatiquement est désactivé ou si d'autres commandes d'heure ou de fuseau horaire sont limitées par le contrôleur de stratégie 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 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 de portée utilisateur location_time_zone_detection_enabled 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 Use location (Utiliser la position) est visible par les utilisateurs dans l'application Paramètres d'AOSP et peut la désactiver. Si l'option est désactivée, l'appareil ne détecte pas automatiquement le fuseau horaire.

Comportement en cas d'activation ou de désactivation de la détection automatique

Lorsque l'utilisateur fait passer la détection du fuseau horaire de manuel à automatique, time_zone_detector est peut-être déjà 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 les paramètres et modifie l'algorithme actuel du service time_zone_detector, time_zone_detector peut déjà avoir reçu des suggestions pour le nouvel algorithme. L'heure de l'appareil peut donc être modifiée pour correspondre immédiatement à l'opinion du service time_zone_detector.

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

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

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

La détection du fuseau horaire basé sur la position est disponible sur Android 12 ou version ultérieure. Il s'agit d'une fonctionnalité facultative de détection automatique des fuseaux horaires 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 sur le serveur système et contient le code chargé d'envoyer des suggestions d'algorithmes de localisation au service time_zone_detector. Pour en savoir plus, consultez la section Détection du fuseau horaire de l'emplacement.

Considérations relatives à l'adoption des fonctionnalités

Cette section décrit les aspects de la fonctionnalité de détection du fuseau horaire de localisation afin d'aider le fabricant d'un appareil à déterminer s'il doit l'adopter sur un appareil.

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

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

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

Dépend de la MCC, de l'exactitude et de la disponibilité de NITZ.
Cela dépend de la configuration de la fonctionnalité ou des composants du plug-in.

L'exactitude varie généralement en fonction des éléments suivants:
  • Précision et régularité du fournisseur de position
  • Qualité des données de la carte des fuseaux horaires.
Mise à jour La détection des services de téléphonie s'appuie sur les fichiers contenus dans le module Time Zone Data pouvant être mis à jour (com.android.tzdata APEX). Dépend de la configuration de la fonctionnalité ou des composants du plug-in.

La facilité de mise à jour varie généralement selon que l'appareil utilise les données de la carte des fuseaux horaires du serveur ou du client.

Remarque: Les données de carte de fuseau horaire ne sont pas contenues dans le module de données de fuseau horaire utilisé pour mettre à jour la copie Android du fichier TZDB et d'autres informations de fuseau horaire.

Les fabricants d'appareils doivent également prendre en compte la cohérence des versions entre les règles de fuseau horaire et les données de la carte du fuseau horaire.
Consommation Consommation d'énergie nulle ou faible Cela dépend des paramètres de localisation de l'utilisateur, des plug-ins utilisés et généralement des demandes de position par d'autres applications.
Disponibilité Appareils de téléphonie uniquement. Nécessite généralement une carte SIM opérationnelle. La détection de la position dépend des fournisseurs de géolocalisation 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. Dans le cadre de la détection du fuseau horaire, les utilisateurs peuvent s'inquiéter du partage de leur position géographique. Indépendamment de 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. Elles peuvent également 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 lui indique le fuseau horaire à utiliser dans cet environnement.
  • Actif : l'appareil doit déterminer lui-même le fuseau horaire et, en fonction des paramètres de confidentialité et du consentement des utilisateurs, obtenir la position de l'appareil pour ce faire. Il peut ensuite partager sa position avec des services externes. Pour en savoir plus sur la confidentialité et le consentement des utilisateurs, consultez la discussion ci-dessous.

La détection passive, comme avec l'algorithme de téléphonie, n'a aucune incidence supplémentaire sur la confidentialité des utilisateurs.

La détection active, par exemple avec l'algorithme de localisation, consiste à déterminer la position de l'appareil, ce que les utilisateurs ne souhaitent peut-être pas accepter. La position peut être envoyée via 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 gère pas directement la position elle-même : la détection de la position et la mise en correspondance de la position avec les ID de fuseau horaire sont laissées aux composants de plug-in configurés par les fabricants d'appareils.

Pour en savoir plus sur les fonctionnalités de confidentialité des utilisateurs, consultez la section 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 de la téléphonie et du fuseau horaire, consultez Détection du fuseau horaire par téléphonie et Détection du fuseau horaire par position.

La configuration AOSP de base est la suivante : 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 remplacement de la téléphonie. Cette fonctionnalité est disponible pour Android 13 ou version ultérieure.

Modifier le comportement par défaut de l'appareil

Dans AOSP, la détection automatique des fuseaux horaires 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.

Lors de la restauration d'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 fournit des informations sur le débogage et le test du comportement du service time_zone_detector et des 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.

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

adb shell cmd device_config set_sync_disabled_for_tests persistent

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

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 :

adb shell cmd time_zone_detector dump

Pour afficher des commandes supplémentaires permettant de déboguer et de tester la détection du fuseau horaire, utilisez:

adb shell cmd time_zone_detector help

Le résultat d'aide décrit également les propriétés du service device_config qui peuvent être utilisées pour affecter le comportement du service time_zone_detector à des fins de test ou de production. Pour en savoir plus, consultez la section Configurer un appareil à l'aide du service device_config.

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

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

    • Pour vider l'état de time_zone_detector, utilisez adb shell cmd time_zone_detector dump
    • Pour modifier le paramètre 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 et l'état du service actuels 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:
...

Ces informations peuvent être interprétées comme suit:

Clé Valeur
mUserConfigAllowed Indique si l'utilisateur est empêché par le contrôleur des règles relatives aux appareils de contrôler les paramètres de date et d'heure.
mTelephonyDetectionSupported Indique si l'appareil dispose de la détection du fuseau horaire téléphonique.
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 en fonction de la configuration et de la présence d'au moins un LTZP.
mAutoDetectionEnabled Indique si la détection automatique des fuseaux horaires est activée.
mLocationEnabled Bouton d'activation/de désactivation de la localisation
mGeoDetectionEnabled 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é proposées via les paramètres (manuellement) et par les algorithmes de téléphonie et de localisation.