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

La détection du fuseau horaire basée sur la position, disponible sur Android 12 et versions ultérieures, est une fonctionnalité de détection automatique du fuseau horaire facultative qui permet aux appareils d'utiliser leur position et les données de la carte des fuseaux horaires pour déterminer le fuseau horaire.

La détection du fuseau horaire basée sur la position est un mécanisme alternatif à la détection du fuseau horaire de la téléphonie. Étant donné que cette fonctionnalité ne nécessite pas de téléphonie, elle peut être prise en charge sur des appareils de différents facteurs de forme en plus des appareils de téléphonie mobile.

La fonctionnalité de détection du fuseau horaire basée sur la position se compose des éléments suivants dans la plate-forme AOSP :

  • Logique de détection du fuseau horaire dans le serveur système
  • Option accessible à l'utilisateur dans les paramètres, introduite dans Android 12, permettant aux utilisateurs de choisir entre les mécanismes de détection du fuseau horaire de la téléphonie et de la localisation

  • Système de plug-ins pour les composants qui effectuent la détection de la position et le mappage du fuseau horaire. Le plug-in est appelé fournisseur de fuseau horaire basé sur la localisation (LTZP, Location Time Zone Provider). Un appareil peut en comporter jusqu'à deux. La plate-forme fournit des API système qui doivent être utilisées pour implémenter une LTZP.

  • Implémentation LTZP de référence.

  • Hébergez des outils pour générer un ensemble de données de référence à partir des données Open Street Map (OSM) pouvant être utilisées avec l'implémentation de référence.

Confidentialité des utilisateurs

La détection du fuseau horaire basée sur la position inclut les fonctionnalités suivantes pour la confidentialité des utilisateurs :

  • Lorsqu'un bouton permet de sélectionner l'algorithme de localisation, les utilisateurs peuvent le désactiver à tout moment.

  • Les suggestions de fuseaux horaires basées sur la position ne sont pas partagées entre les utilisateurs d'un même appareil.

  • Les utilisateurs peuvent contrôler explicitement la détection de la position pour la détection du fuseau horaire sur l'écran des paramètres Date et heure. Les utilisateurs n'ont pas besoin d'accorder explicitement l'autorisation via une boîte de dialogue.

  • Les informations sur la position de l'appareil ne sont pas transmises aux services de la plate-forme Android. Voici ce qui se passe à la place :

    • Les services de détection du fuseau horaire reçoivent des ID de fuseau horaire de la part du LTZP, et non de la position de l'appareil. Il s'agit de l'API minimale requise pour la détection du fuseau horaire en fonction de la position.
    • Les intégrateurs système contrôlent le fonctionnement des LTZP individuelles. Les implémentations LTZP peuvent utiliser des données de carte de fuseaux horaires entièrement stockées sur l'appareil Android, des serveurs ou une approche hybride.

Comportement de la fonctionnalité

Le service time_zone_detector détermine quand modifier le fuseau horaire actuel de l'appareil en fonction des suggestions qu'il reçoit des algorithmes de détection.

Le service location_time_zone_manager est responsable de la génération de suggestions pour l'algorithme de localisation de time_zone_detector. Le service location_time_zone_manager s'exécute dans le processus du serveur système.

Le service location_time_zone_manager ne contient aucune logique de détection du fuseau horaire. Ce service est responsable de la gestion du cycle de vie d'un ou deux plug-ins LTZP.

Lorsque la détection du fuseau horaire basée sur la position n'est pas nécessaire, les LTZP ne sont pas lancés. Cela signifie que le système de détection du fuseau horaire basé sur la position ne demande pas aux LTZP de suivre la position de l'appareil, sauf si cela est explicitement requis. Voici quelques raisons possibles :

  • Contrairement aux signaux de téléphonie qui sont reçus passivement dans le cadre des opérations de téléphonie normales, la localisation peut être demandée activement aux fournisseurs de localisation Android et peut consommer de l'énergie supplémentaire.
  • Les paramètres de localisation sont définis au niveau de l'utilisateur, et Android doit les respecter.
  • L'obtention de la position de l'appareil est une question de confidentialité.

De plus, le service location_time_zone_manager fait une suggestion incertaine (si nécessaire) lorsque l'utilisateur actuel modifie les paramètres pour éviter le partage d'informations de localisation entre les utilisateurs.

En raison de ces choix, il faut quelques secondes après le changement d'algorithme actuel pour la localisation ou après le changement d'utilisateur actuel avant que le fuseau horaire puisse être détecté. Cela dépend également des implémentations des LTZP utilisées.

L'implémentation de la détection du fuseau horaire basée sur la position (LTZP) dans AOSP autorise jusqu'à deux LTZP, un LTZP principal et un LTZP secondaire, comme défini ici :

LTZP principal
S'exécute à tout moment lorsque l'utilisateur a autorisé l'exécution de la fonctionnalité de détection du fuseau horaire.
LTZP secondaire
s'exécute si le LTZP principal indique que le fuseau horaire est incertain, signale un échec permanent ou expire lors de l'initialisation. S'arrête si le LTZP principal envoie une suggestion certaine.

Comme le montre la figure 1, le service time_zone_detector reçoit des suggestions de fuseaux horaires de l'algorithme de téléphonie ou de localisation. L'algorithme de localisation reçoit des suggestions de la part de la LTZP principale ou secondaire.

Informations sur le flux de détection du fuseau horaire basé sur la position

Figure 1 : Flux d'informations sur la détection du fuseau horaire basée sur la position.

Exigences de configuration de l'appareil

Pour prendre en charge la fonctionnalité de fuseau horaire basé sur la localisation, les appareils doivent être configurés avec des LTZP qu'ils peuvent utiliser. Au moins un LTZP doit être activé et configuré sur les appareils pour que la détection du fuseau horaire en fonction de la position fonctionne et soit visible par les utilisateurs dans les paramètres.

Configuration de l'appareil

Cette section explique comment les fabricants d'appareils peuvent configurer les appareils pour qu'ils prennent en charge la détection du fuseau horaire en fonction de la position.

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

Clé de configuration Valeur AOSP Description
config_enableGeolocationTimeZoneDetection true Il s'agit de la commande principale pour la fonctionnalité de détection du fuseau horaire basée sur la position.

Cette fonctionnalité est compatible par défaut avec AOSP. Au moins une zone de protection et de traitement des données doit être activée ou configurée pour que la fonctionnalité soit disponible pour les utilisateurs.

Définir la valeur sur false désactive complètement la fonctionnalité, ce qui permet d'économiser un peu de mémoire.
config_enablePrimaryLocationTimeZoneProvider false Cela permet d'activer la LTZP principale.
config_primaryLocationTimeZoneProviderPackageName Définissez ce paramètre sur le nom du package de l'application dans laquelle se trouve le service de fournisseur principal.
config_enableSecondaryLocationTimeZoneProvider false Cela active la LTZP secondaire.
config_secondaryLocationTimeZoneProviderPackageName Définissez ce paramètre sur le nom du package de l'application dans laquelle le service de fournisseur secondaire est disponible.

Par défaut, la configuration AOSP définit la clé config_enableGeolocationTimeZoneDetection sur true, ce qui permet la prise en charge de la fonctionnalité de détection du fuseau horaire en fonction de la position. La fonctionnalité n'est pas visible par les utilisateurs au départ, car AOSP n'inclut pas de configuration LTZP par défaut. Toutefois, en utilisant cette configuration par défaut, les fabricants d'appareils peuvent activer et simuler des LTZP à partir de la ligne de commande pour les tests. (Pour en savoir plus, consultez Déboguer et tester.)

API d'état LTZP

Dans Android 14, les API LTZP sont compatibles avec les informations sur l'état des rapports LTZP. Cela permet à la LTZP de signaler les problèmes que la plate-forme ne peut pas détecter elle-même, car les composants de détection du fuseau horaire de la plate-forme ne sont pas directement impliqués dans la détection de la position ou du fuseau horaire dans l'algorithme de localisation.

La possibilité de signaler que le comportement de la LTZP a été dégradé par l'environnement de l'appareil est utile lorsque le mode de secours de téléphonie est pris en charge. Par exemple, si un LTZP tiers qui s'appuie sur des paramètres ou des autorisations personnalisés pour que sa détection de localisation fonctionne s'exécute en mode dégradé ou est désactivé par les paramètres actuels de l'appareil, le LTZP peut signaler ces informations d'état aux composants internes de la plate-forme, tels que l'application Paramètres, via la méthode reportSuggestion. L'application Paramètres peut ensuite informer les utilisateurs, à l'aide de chaînes ou de personnalisations personnalisables, que certains paramètres doivent être modifiés pour que l'algorithme de localisation fonctionne correctement ou pas du tout.

Pour en savoir plus sur les états que le LTZP peut signaler, consultez TimeZoneProviderStatus.

Configuration et déploiement de LTZP

Lorsque vous configurez une LTZP, lisez les instructions du code source pour frameworks/base/core/java/android/service/timezone/TimeZoneProviderService.java. Les commentaires Javadoc fournissent des informations sur le service, les autorisations requises et d'autres configurations.

Pour configurer une LTZP, les fabricants d'appareils doivent choisir un processus d'application pour héberger le service de la LTZP. Avoir un processus dédié pour un LTZP représente une charge importante. Idéalement, le processus d'application choisi est celui qui s'exécute en permanence, comme le serveur système.

Sur les appareils dotés de composants système modulaires (modules), tenez compte de l'interaction entre les données géographiques utilisées par le LTZP et les règles de fuseau horaire (tzdb) contenues dans le module de données de fuseau horaire (com.android.tzdata). Les mises à jour de l'un sans celles de l'autre sont susceptibles d'entraîner des problèmes d'incompatibilité de version. Pour en savoir plus, consultez Points à prendre en compte pour l'adoption des fonctionnalités.

LTZP de référence AOSP

AOSP contient une implémentation LTZP de référence sous packages/modules/GeoTZ. Cette implémentation de référence utilise les API AOSP pour déterminer la position de l'appareil et un fichier de données sur l'appareil pour mapper la position à un ensemble d'ID de fuseaux horaires.

Un ensemble de données de référence dérivé d'autres projets Open Source est inclus dans le code source. Pour en savoir plus, consultez README.md et les différents fichiers LICENSE.

Déboguer et tester

La section suivante décrit les commandes shell permettant de déboguer et de tester la fonctionnalité de détection du fuseau horaire de localisation.

Interagir avec le service location_time_zone_manager

Lorsque l'algorithme de localisation est pris en charge sur un appareil exécutant Android 12 ou version ultérieure, Android instancie le service location_time_zone_manager au moment du démarrage.

Pour vider l'état actuel de location_time_zone_manager, utilisez la commande suivante :

adb shell cmd location_time_zone_manager dump

Pour afficher un ensemble complet d'options de ligne de commande permettant de faciliter les tests, utilisez :

adb shell cmd location_time_zone_manager help

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

Les implémentations LTZP peuvent fournir leur propre assistance pour le débogage ou les tests. Par exemple, vous pouvez utiliser la commande suivante pour déboguer le LTZP de référence AOSP lorsqu'il est enregistré dans le processus du serveur système :

adb shell dumpsys activity service android/com.android.timezone.location.provider.OfflineLocationTimeZoneProviderService