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.

Aperçu 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 garde la trace de deux états liés mais indépendants :

  • L'heure actuelle de l'époque Unix
  • Le fuseau horaire actuel

L'heure actuelle d'Unix 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 d’Unix n’est pas une valeur fixe. Il se met à jour automatiquement pour refléter le passage du temps. Outre le passage normal du temps, l'heure Unix actuelle d'un périphérique est ajustée si elle s'avère incorrecte, par exemple après une panne de courant.

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

Pour prendre en charge ces calculs d'heure locale, tous les appareils Android disposent d'une base de données de toutes les règles mondiales de fuseau horaire . Pour plus d'informations sur les règles de fuseau horaire, consultez Règles de fuseau horaire .

Lorsqu'un utilisateur se rend vers un nouvel emplacement utilisant un fuseau horaire différent, l'heure actuelle de l'époque Unix 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 actuelle de l’époque 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 via les mécanismes suivants.

  • Détection automatique de l’heure : garantit que l’appareil dispose de l’heure Unix actuelle correcte.
  • Détection automatique du fuseau horaire : garantit que l'appareil dispose du fuseau horaire actuel correct.

Détection automatique de l'heure

Cette section fournit une présentation du service time_detector qui gère la détection automatique de l'heure, les contrôles utilisateur, les options de configuration et les détails des tests.

Le service time_detector

Le service time_detector , présent sur les appareils fonctionnant sous Android 10 ou supérieur, gère la détection automatique de l'heure. Il ajuste l'heure Unix actuelle de l'appareil selon les besoins lorsque la détection automatique de l'heure est activée.

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

Lorsque le service time_detector est certain, ce qui signifie qu'il a reçu une suggestion avec des informations d'époque Unix, il remplace l'heure d'époque Unix actuelle si la suggestion d'heure est différente de l'heure d'époque 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'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'ancienneté des suggestions est prise en compte car les ajustements utilisant les anciennes suggestions d'époque Unix reposent sur l'horloge en temps réel écoulé sur l'appareil, qui est supposée inexacte sur de longues périodes.

Pour établir automatiquement l’heure actuelle d’Unix, un appareil dispose de différentes sources qu’il peut utiliser. C'est ce qu'on appelle les origines dans ce document. 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 d'heure 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 existe diverses raisons pour lesquelles l'établissement de l'heure actuelle d'Unix n'est pas toujours simple pour un appareil Android :

  • L’heure d’époque Unix est un système de chronométrage subtilement 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 être disponibles uniquement à certains moments ou dans certaines circonstances. Par exemple, si l'origine nécessite une connectivité réseau, elle peut être disponible uniquement lorsque l'appareil est connecté à Internet.
  • Les origines peuvent être inexactes ou imprécises, ou comporter des erreurs. Par exemple, si une tour de téléphonie cellulaire ne suit pas correctement le « temps universel », 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 Unix. Par exemple, un retard réseau, une mise en mémoire tampon ou une planification de processus peuvent rendre l'heure d'é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 principales origines de détection de temps configurées pour être utilisées par défaut dans AOSP :

  • Réseau : utilise les serveurs de temps NTP (Network Time Protocol).
  • Téléphonie : utilise les signaux téléphoniques d'identité réseau et de fuseau horaire (NITZ).

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 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 de temps

Les utilisateurs peuvent activer la détection automatique de l'heure dans 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 Paramètres.

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

*Sur Android 11 et versions antérieures, ce paramètre est intitulé Utiliser l'heure fournie par le réseau.

Emplacement des paramètres AOSP Nom des paramètres AOSP Portée Comportement
Système > Date et heure Régler l'heure automatiquement* Tous les utilisateurs

Une bascule.

Lorsqu'il est activé , l'appareil est responsable de la détection de l'heure Unix actuelle. Lorsqu'elle est désactivée , les utilisateurs disposent de commandes pour régler manuellement l'heure de l'appareil.

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

Configuration

Les fabricants d'appareils peuvent configurer le service time_detector de différentes manières, par exemple quelles origines utiliser et comment 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 et la priorité dans laquelle time_detector considère ces origines.

Pour les appareils exécutant Android 11 ou une 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 origines à utiliser par défaut. Les suggestions d'heures de réseau sont prioritaires par rapport aux suggestions d'heures 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 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 :

Délais autorisés

Android 14 introduit une limite de temps supérieure pour les suggestions temporelles reçues par le service time_detector . Si l'appareil prend en charge 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 Y2038.

Android 12 a introduit une limite de temps inférieure utilisée pour valider les suggestions d'heure reçues par le service time_detector . La valeur temporelle inférieure utilisée pour les suggestions automatisées est définie à partir de l'horodatage de génération. Cela fonctionne sur 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 temporelle inférieure, le service time_detector rejette la suggestion car elle ne peut pas être valide si l'horodatage de construction est correct.

Pour les appareils exécutant Android 11 ou une version antérieure, le service time_detector ne valide pas les suggestions d’heure d’époque Unix entrantes.

Temps de débogage et de test

Cette section fournit des informations sur la façon de déboguer et de 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 time_detector l'état du service time_detector , utilisez :

adb shell cmd time_detector dump

Pour voir des commandes supplémentaires pour le débogage et le test de la détection du fuseau horaire, utilisez :

adb shell cmd time_detector help

Le résultat de 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 à des fins de test ou en production. Pour plus de détails, consultez Configuration d'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 sortie de la commande adb shell cmd time_detector dump , avec les informations sur l'origine actuelle et l'état du service 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:
    ...

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

Clé Valeur
mEnvironment.isAutoTimeDetectionEnabled() Si la détection automatique de l'heure est activée.
mEnvironment.autoTimeLowerBound() La limite inférieure actuelle utilisée pour valider les suggestions de temps.
mEnvironment.autoOriginPriorities() Les origines d'utilisation et l'ordre de priorité.

Le journal des changements d'heure indique les occasions où le service time_detector a modifié l'heure Unix actuelle de l'appareil.

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

Détection automatique du fuseau horaire

Cette section fournit une présentation du service time_zone_detector qui gère la détection automatique du fuseau horaire, les contrôles utilisateur dans les paramètres, la détection du fuseau horaire de la téléphonie et de la localisation et les détails des tests.

Le service time_zone_detector

Le service time_zone_detector , présent sur les appareils fonctionnant sous Android 11 ou supérieur, gère la détection automatique des fuseaux horaires. Il ajuste le fuseau horaire actuel de l'appareil selon les besoins 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 : 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 de fuseau horaire importantes, ce qui peut l'amener à remplacer le 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 dans lesquels time_zone_detector n'a aucune information de fuseau horaire à utiliser, ou dans lesquels il a plusieurs fuseaux horaires parmi lesquels choisir. Ces états sont les suivants :

  • Un certain état sans fuseau horaire est défini lorsque l'appareil se trouve dans un endroit sans fuseau horaire, par exemple dans les eaux internationales ou dans une zone contestée. Cet état est similaire à un état incertain, mais indique que time_zone_detector n'a pas besoin de prendre d'autres mesures pour tenter de déterminer le fuseau horaire.
  • Un certain état avec plusieurs fuseaux horaires est entré en cas d'ambiguïté ou de conditions limites. Dans cet état, si le fuseau horaire actuel est l'un des fuseaux horaires dont time_zone_detector est certain, 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 rigidité si l'utilisateur a précédemment sélectionné manuellement son fuseau horaire ou lorsque l'appareil s'approche d'une frontière.

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

Généralement, 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 identifiant 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 « Amérique/Denver » et « Amérique/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 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 lorsque des suggestions sont reçues.

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

  • Téléphonie
  • Emplacement

Le service time_zone_detector utilise généralement un seul algorithme pour déterminer le fuseau horaire. Lorsque l'algorithme de localisation est pris en charge sur un appareil, 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é devient incertain quant au fuseau horaire, time_zone_detector n'utilise généralement pas les suggestions d'un algorithme différent. Les suggestions associées aux 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 plus de détails sur la situation dans laquelle plusieurs algorithmes sont utilisés pour déterminer le fuseau horaire, consultez Mode de secours de téléphonie .

Mode de repli de la téléphonie

Sur les appareils exécutant Android 13 et versions ultérieures, le service time_zone_detector prend en charge le mode de secours de la 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 localisation est incapable de détecter le fuseau horaire ou lorsque la détection de localisation met plus de temps à détecter le fuseau horaire que la détection de téléphonie.

Le mode de secours de la téléphonie s'applique aux appareils sur lesquels la téléphonie et la détection de localisation sont prises en charge, et sur lesquels l'utilisateur a activé Utiliser la localisation pour définir le fuseau horaire dans 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 repli de la téléphonie peut être déclenché via les API de rapport d'état LTZP . Autrement dit, si un LTZP signale qu'il est incertain et que sa capacité à détecter l'emplacement ou le fuseau horaire est dégradée par son environnement, le mode de repli de la téléphonie est déclenché.

En mode de secours téléphonique, le service time_zone_detector utilise les suggestions téléphoniques comme si la détection de localisation était désactivée jusqu'à ce que l'algorithme de localisation fasse une certaine suggestion. Après avoir reçu une certaine suggestion, le mode de secours téléphonique est désactivé et les suggestions de localisation sont utilisées exclusivement.

Pour plus de détails sur la configuration du mode de secours de téléphonie, voir Configuration de la détection de 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 Paramètres.

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

*Sur Android 11 et versions antérieures, ce paramètre est intitulé Utiliser le fuseau horaire fourni par le réseau.

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

Une bascule.

Lorsqu'il est activé , l'appareil est responsable de la détection du 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 l'emplacement pour définir le fuseau horaire Utilisateur actuel

Une bascule.

Disponible à partir d'Android 12. Cette bascule s'affiche uniquement lorsque la détection du fuseau horaire de localisation est prise en charge sur l'appareil.

Pour les modifications introduites dans 14, voir Appareils prenant uniquement en charge la détection du fuseau horaire de localisation .

Emplacement Utiliser l'emplacement Utilisateur actuel

Une bascule.

Autorise ou empêche l'utilisation de l'emplacement de l'appareil de manière générale. La valeur est pertinente si la détection du fuseau horaire de localisation est prise en charge sur l'appareil.

Ce qui suit donne 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 automatiquement le fuseau horaire : OFF

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

    • [Emplacement] Utiliser l'emplacement : OFF

      • Les signaux téléphoniques sont utilisés pour détecter le fuseau horaire.
    • [Emplacement] Utiliser l'emplacement : ON

      • [Date et heure] Utiliser l'emplacement pour définir le fuseau horaire : ON

        • La localisation est utilisée pour détecter le fuseau horaire.
      • [Date et heure] Utiliser l'emplacement pour définir le fuseau horaire : OFF

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

Appareils utilisateur multiples

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

L' option Utiliser l'emplacement pour définir le fuseau horaire est limitée à l'utilisateur actuel et n'est pas limitée par la stratégie relative aux appareils, ce qui 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 contrôles d'heure ou de fuseau horaire sont limités par le Device Policy Controller.

Appareils prenant uniquement en charge l'algorithme de détection de fuseau horaire de localisation

Cette section décrit le comportement des appareils prenant en charge uniquement l'algorithme de localisation.

  • Android 14 et supérieur

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

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

Comportement lors du passage vers et depuis la détection automatique

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

De même, lorsque l'utilisateur apporte une modification aux paramètres entraînant 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 et l'heure de l'appareil peut donc être modifiée pour correspondre immédiatement à l'opinion du service time_zone_detector .

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

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

Détection du fuseau horaire de localisation

La détection du fuseau horaire de localisation est disponible sur Android 12 ou version ultérieure. Il s'agit d'une fonction de détection automatique de fuseau horaire en option qui permet aux appareils d'utiliser leur emplacement 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é de soumettre les suggestions d'algorithmes de localisation au service time_zone_detector . Pour plus d’informations, consultez Détection du fuseau horaire de l’emplacement .

Considérations sur l’adoption des fonctionnalités

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

Comparaison de la téléphonie et de la détection de localisation

Le tableau suivant présente une comparaison des avantages et des inconvénients liés à l'utilisation de signaux de localisation plutôt que de signaux téléphoniques pour la détection de fuseau horaire.

Détection de téléphonie Détection de localisation
Exactitude Varie selon les pays.

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

L'exactitude varie généralement selon :
  • Précision et régularité du fournisseur de localisation.
  • La qualité des données cartographiques des fuseaux horaires.
Possibilité de mise à jour La détection de téléphonie repose sur des fichiers contenus dans le module actualisable Time Zone Data (com.android.tzdata APEX). Cela dépend de la configuration des fonctionnalités ou des composants du plug-in.

La possibilité de mise à jour dépend généralement du fait que l'appareil utilise les données cartographiques de fuseau horaire du serveur ou du client.

Remarque : Les données cartographiques des fuseaux horaires ne sont pas contenues dans le module de données de fuseau horaire utilisé pour mettre à jour la copie Android de TZDB et d'autres informations sur le 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 cartographiques des fuseaux horaires.
Consommation d'énergie Aucune ou faible consommation d’énergie Cela dépend des paramètres de localisation de l'utilisateur, des plug-ins utilisés et généralement 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 localisation 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 situation géographique. La localisation est une donnée sensible. Les utilisateurs peuvent s'inquiéter du fait que la connaissance de leur emplacement 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 une autorisation Android, et les applications peuvent déduire une idée imprécise de l'emplacement de l'appareil à partir de ces informations.

Plus précisément, la détection de fuseau horaire peut fonctionner par des moyens passifs ou actifs :

  • Passif : quelque chose dans 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 pour ce faire l'emplacement de l'appareil. Il peut alors partager sa localisation avec des services externes. Voir la discussion ci-dessous pour plus de détails sur la confidentialité et le consentement des utilisateurs.

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

La détection active, comme avec l'algorithme de localisation, implique de déterminer l'emplacement de l'appareil, que les utilisateurs pourraient ne pas vouloir accepter, et l'emplacement pourrait être envoyé sur un réseau afin de déterminer l'ID du fuseau horaire.

L'approche d'Android en matière de confidentialité des utilisateurs pour la détection du fuseau horaire donne à l'utilisateur la possibilité de désactiver individuellement les algorithmes 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 avec les identifiants de fuseau horaire sont laissés aux composants de plug-in configurés par les fabricants d'appareils.

Pour plus de détails sur les fonctionnalités de confidentialité des utilisateurs, consultez Détection du fuseau horaire de localisation .

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 plus de détails sur la configuration des algorithmes de détection de téléphonie et de fuseau horaire, consultez Détection de fuseau horaire de téléphonie et Détection de fuseau horaire de localisation .

La configuration de base AOSP se trouve dans 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 téléphonique. Ceci est disponible pour Android 13 et supérieur.

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 .

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 tests de fuseau horaire

Cette section fournit des informations sur la façon de déboguer et de tester le comportement du service time_zone_detector et d'autres composants partagés par tous les algorithmes.

Configuration d'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). Lors de l'utilisation 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 réinitialiserait les indicateurs et effacerait les valeurs définies pour les tests.

Sous 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 drapeaux 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 plus d'informations, 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 voir des commandes supplémentaires pour le débogage et le test de la détection du fuseau horaire, utilisez :

adb shell cmd time_zone_detector help

Le résultat de l'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 en production. Pour plus de détails, consultez Configuration d'un appareil à l'aide du service device_config .

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

  • Vérifiez visuellement via l'interface utilisateur des paramètres. Pour plus d'informations, voir 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 plus d'informations, utilisez adb shell cmd time_zone_detector help .

Voici un exemple de sortie 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:
...

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

Clé Valeur
mUserConfigAllowed Indique si l'utilisateur est empêché de contrôler les paramètres de date et d'heure par le Device Policy Controller .
mTelephonyDetectionSupported Si l'appareil dispose d'une détection de fuseau horaire de téléphonie.
mGeoDetectionSupported Si l'appareil prend en charge la détection du fuseau horaire de localisation. Il s'agit de l'état effectif basé sur la configuration et la présence d'au moins un LTZP.
mAutoDetectionEnabled Si la détection automatique du fuseau horaire est activée.
mLocationEnabled L'emplacement principal bascule.
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 quelles suggestions ont été faites via les paramètres (manuel) et par les algorithmes de téléphonie et de localisation.