Aperçu 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 de l'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 ses utilisateurs.

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, en été à Los Angeles, l'appareil soustrait 7 heures à l'heure de l'epoch 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 contenant toutes les règles globales relatives aux fuseaux horaires. Pour en savoir plus sur les règles de fuseau horaire, consultez la page Règles de fuseau horaire.

Lorsqu'un utilisateur se rend dans une nouvelle zone géographique utilisant un fuseau horaire différent, l'heure de l'epoch Unix actuelle n'a pas besoin d'être ajustée, mais l'utilisateur souhaite généralement afficher 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: vérifie que l'heure de l'epoch Unix actuelle de l'appareil est correcte.
  • Détection automatique du fuseau horaire: vérifie que le fuseau horaire actuel de l'appareil est 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 d'horaire 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 contenant des informations sur l'epoch Unix, il remplace l'heure actuelle de l'époque Unix si la suggestion est différente de l'heure actuelle de l'époque Unix.

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'ancienneté des suggestions est prise en compte, car les ajustements utilisant d'anciennes suggestions d'heure d'epoch Unix se basent 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 de l'epoch Unix actuelle, un appareil peut utiliser différentes sources. Dans ce document, celles-ci 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 de temps d'epoch Unix plus récentes. 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, il n'est pas toujours simple de définir l'heure actuelle de l'epoch Unix sur un appareil Android pour diverses raisons:

  • 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 peut n'ê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 de l'époque Unix. Par exemple, un retard du réseau, une mise en mémoire tampon ou une planification de processus peuvent rendre l'heure de l'époque Unix inexacte.
  • 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.

Il existe deux origines principales de détection de l'heure 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é à des 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 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'heure d'epoch 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 d'AOSP.

*Sur Android 11 ou version antérieure, ce paramètre est intitulé Utiliser la date et l'heure fournies 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 son heure locale, et non l'heure de l'epoch 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 de l'origine

À 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é selon laquelle time_detector les considère.

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>

Dans Android 12, les suggestions de réseau et de téléphonie sont configurées en tant qu'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 ayant la priorité la plus élevée correspond à l'heure actuelle de l'horloge système de l'appareil avec un délai de quelques secondes, l'heure de l'appareil ne sera pas modifiée. Cela permet d'éviter de créer des tâches 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 maximale 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 limite dans le temps inférieure utilisée pour les suggestions automatiques est définie à partir du code temporel de la compilation. Cette approche repose sur le principe qu'une heure valide ne peut pas être antérieure à la compilation de l'image système de l'appareil. Si une suggestion d'horaire est antérieure à la limite de temps inférieure, le service time_detector la supprime, car elle ne peut pas être valide si l'horodatage 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.

Temps de débogage et de test

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, 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

Le résultat d'aide décrit également les propriétés du service device_config pouvant être utilisées pour affecter le comportement de time_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 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 proposées 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 des fuseaux horaires, les commandes utilisateur dans les paramètres, la détection des fuseaux horaires pour la téléphonie et la localisation, ainsi que des détails sur les 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 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 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. En cas de doute, cela signifie qu'il n'a reçu aucune information ou seulement des informations ayant un faible niveau de confiance, 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 apparaît alors en présence d'ambiguïté ou de conditions aux frontières. Dans cet état, si le fuseau horaire actuel est l'un des fuseaux horaires dont time_zone_detector a une certaine certitude, le fuseau horaire actuel reste 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 règle générale, les suggestions sont de 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 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 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 dispose désormais d'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 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 détermine le fuseau horaire à l'aide d'un seul algorithme. Lorsque l'algorithme de localisation est pris en charge sur un appareil, celui-ci est déterminé en fonction des paramètres de fuseau horaire configurés par l'utilisateur. Lorsque l'algorithme en cours d'utilisation n'est pas certain 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 dans laquelle plusieurs algorithmes sont utilisés pour déterminer le fuseau horaire, consultez la section Mode de remplacement pour la téléphonie.

Mode de remplacement pour les appels

Sur les appareils équipés d'Android 13 ou version ultérieure, le service time_zone_detector est compatible avec le mode de remplacement téléphonique. 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 pour la téléphonie s'applique aux appareils sur lesquels la détection de la téléphonie et de la position est disponible, et pour lesquels l'utilisateur a activé l'option Utiliser la localisation pour définir le fuseau horaire dans les paramètres de fuseau horaire. Le mode est activé automatiquement au redémarrage d'un appareil et lorsque le mode Avion est désactivé.

Dans Android 14 et versions ultérieures, le remplacement téléphonique peut être déclenché via les API de création de rapports d'état LTZP. En d'autres termes, si un réseau 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 remplacement téléphonique est déclenché.

En mode de secours pour la 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 en fasse une. Après avoir reçu une suggestion spécifique, le mode de remplacement par 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 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

Bouton d'activation

Lorsqu'il est activé, l'appareil est chargé de détecter le fuseau horaire actuel. Lorsqu'elle est désactivée, les utilisateurs disposent de commandes permettant de 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 ne s'affiche que lorsque la détection du fuseau horaire de la position est prise en charge sur l'appareil.

Pour en savoir plus sur les modifications apportées dans la version 14, consultez la section Appareils compatibles uniquement avec la détection du fuseau horaire basée sur la localisation.

Position Utiliser ma position Utilisateur actuel

Bouton d'activation

Autorise ou empêche l'utilisation de la position de l'appareil de manière générale. Cette valeur est pertinente si la détection du fuseau horaire de la localisation est prise en charge par 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 and Time] Définir le fuseau horaire automatiquement:ACTIVÉ

    • [Location] Utiliser la localisation:DÉSACTIVÉE

      • Les signaux de téléphonie permettent de 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 appartenant à plusieurs 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 d'activation Use location to set time zone (Utiliser la localisation pour définir le fuseau horaire) s'applique à l'utilisateur actuel et n'est pas limité par les règles relatives aux appareils. Cela signifie que les utilisateurs peuvent toujours modifier sa valeur, même si l'option Définir le fuseau horaire automatiquement est désactivée ou si d'autres contrôles d'heure ou de fuseau horaire sont limités par l'outil de contrôle des règles relatives aux appareils.

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

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

  • Android 14 ou version ultérieure

    • Les utilisateurs ne voient pas l'option Use location (Utiliser la position) dans l'application Paramètres d'AOSP, et l'appareil se comporte comme si l'option Use location (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 effectue une modification dans les paramètres qui entraîne une modification de 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 immédiatement modifiée pour correspondre à l'opinion 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 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 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 sur le serveur système et contient le code chargé d'envoyer les suggestions d'algorithmes de localisation au service time_zone_detector. Pour en savoir plus, consultez la page Détection du fuseau horaire de la position.

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 la position

Le tableau suivant compare les avantages et les inconvénients de l'utilisation de la localisation 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 la position
Exactitude La somme varie selon les pays.

Dépend du compte CM, de l'exactitude et de la disponibilité des données 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 services de localisation
  • Qualité des données de la carte des fuseaux horaires.
Facilité de 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). Cela 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 tenir compte de 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. Sans lien 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. De plus, 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 à l'appareil 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é des utilisateurs et de leur consentement, obtient la position de l'appareil pour le 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é pour les 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 localisation : la détection de la localisation et la mise en correspondance de l'emplacement avec les ID de fuseau horaire sont confié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 téléphonie et de détection du fuseau horaire, consultez les pages Détection du fuseau horaire de la téléphonie et Détection du fuseau horaire de la localisation.

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 la valeur est true, time_zone_detector utilise le mode de secours pour 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 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 du temps 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. Pour vous assurer que ce paramètre ne sera 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 à des fins de test, en particulier lors de tests manuels de longue durée, l'appareil peut synchroniser les indicateurs, ce qui les réinitialise et supprime 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 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 time_zone_detector 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 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 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 basé sur la configuration et de la présence d'au moins un LTZP.
mAutoDetectionEnabled Indique si la détection automatique du fuseau horaire est activée.
mLocationEnabled Bouton d'activation/de désactivation de l'emplacement principal
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 créées via les paramètres (manuellement), ainsi que par les algorithmes de téléphonie et de localisation.