La détection du fuseau horaire basée sur la position, disponible sur Android 12 et versions ultérieures, est une fonctionnalité facultative de détection automatique du fuseau horaire qui permet aux appareils d'utiliser leurs données de localisation et de carte de fuseau horaire 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 basée sur la téléphonie. Comme 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 composants suivants dans la plate-forme AOSP:
- Logique de détection du fuseau horaire dans le serveur système
Option accessible aux utilisateurs dans les paramètres, introduite dans Android 12, qui permet aux utilisateurs de choisir entre les mécanismes de détection des fuseaux horaires de téléphonie et de localisation
Système de plug-in 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 de localisation (LTZP, Location Time Zone Provider). Il peut y en avoir jusqu'à deux sur un appareil. La plate-forme fournit des API système qui doivent être utilisées pour implémenter un LTZP.
Implémentation de référence de LTZP.
Outils d'hébergement permettant de générer un ensemble de données de référence à partir de 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 de confidentialité des utilisateurs suivantes:
Lorsqu'un bouton d'activation/de désactivation de l'algorithme de localisation est disponible, les utilisateurs peuvent le désactiver à tout moment.
Les suggestions de fuseaux horaires dérivées de la position ne sont pas partagées entre les utilisateurs d'un appareil.
Les utilisateurs peuvent contrôler explicitement la détection de l'emplacement pour la détection du fuseau horaire via l'écran de paramètres Date et heure. Les utilisateurs n'ont pas besoin d'accorder explicitement l'autorisation via une boîte de dialogue d'autorisation.
Les informations de localisation de l'appareil ne sont pas transmises aux services de la plate-forme Android. Voici ce qui se produit à la place:
- Les services de détection du fuseau horaire reçoivent des ID de fuseau horaire de la LTZP, et non de la position de l'appareil. Il s'agit de l'API minimale requise pour prendre en charge la détection du fuseau horaire basé sur la position.
- Les intégrateurs système contrôlent le fonctionnement de chaque LTZP. Les implémentations LTZP peuvent utiliser des données de carte de fuseau horaire stockées entièrement sur l'appareil Android, utiliser des serveurs ou adopter 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 chargé de générer des 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 de fuseau horaire. Ce service est responsable de la gestion du cycle de vie d'un ou de 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 démarrés. Cela signifie que le système de détection du fuseau horaire basé sur la position ne demande pas aux services LTZP de suivre la position de l'appareil, sauf si cela est explicitement requis. Voici quelques raisons possibles de ce comportement:
- Contrairement aux signaux de téléphonie qui sont reçus passivement dans le cadre des opérations de téléphonie normales, la position peut être demandée activement aux fournisseurs de position Android et peut consommer de l'énergie supplémentaire.
- Les paramètres de localisation sont définis par utilisateur, et Android doit respecter les paramètres de l'utilisateur actuel.
- L'obtention de la position de l'appareil est sensible à la confidentialité.
De plus, le service location_time_zone_manager
émet une suggestion incertaine (si nécessaire) lorsque l'utilisateur actuel modifie les paramètres pour éviter de partager des informations de localisation entre les utilisateurs.
En raison de ces choix, il faut quelques secondes après avoir défini l'algorithme actuel sur la position ou après avoir changé l'utilisateur actuel pour 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 AOSP autorise jusqu'à deux LTZP, un LTZP principal et un LTZP secondaire, comme défini ici:
- LTZP principal
- S'exécute en permanence lorsque l'utilisateur a autorisé l'exécution de la fonctionnalité de détection du fuseau horaire de la position.
- Zone de protection de l'environnement secondaire
- s'exécute si le LTZP principal indique que le fuseau horaire est incertain, signale une défaillance permanente ou expire lors de l'initialisation. S'arrête si le LTZP principal envoie une certaine suggestion.
Comme illustré dans la figure 1, le service time_zone_detector
reçoit des suggestions de fuseau horaire de l'algorithme de téléphonie ou de localisation. L'algorithme de localisation reçoit des suggestions de la LTZP principale ou secondaire.
Figure 1 : Flux d'informations de détection du fuseau horaire basée sur la position.
Configuration requise de l'appareil
Pour prendre en charge la fonctionnalité de fuseau horaire basé sur la position, les appareils doivent être configurés avec les fuseaux horaires locaux que l'appareil peut utiliser. Pour que la détection du fuseau horaire de la position soit fonctionnelle et visible par les utilisateurs dans les paramètres, au moins un fuseau horaire local doit être activé et configuré.
Configuration de l'appareil
Cette section explique comment les fabricants d'appareils peuvent configurer leurs appareils pour qu'ils prennent en charge la détection du fuseau horaire de l'emplacement.
La configuration AOSP de base se trouve à l'emplacement frameworks/base/core/res/res/values/config.xml
:
Clé de configuration | Valeur AOSP | Description |
---|---|---|
config_enableGeolocationTimeZoneDetection |
true |
Il s'agit du contrôle principal de la fonctionnalité de détection du fuseau horaire basée sur la position.
Cette fonctionnalité est compatible par défaut avec AOSP. Au moins un LTZP doit être activé ou configuré pour que la fonctionnalité soit disponible pour les utilisateurs. Définir la valeur sur false désactive complètement la fonctionnalité pour économiser de la mémoire. |
config_enablePrimaryLocationTimeZoneProvider |
false |
Cela active le LTZP principal. |
config_primaryLocationTimeZoneProviderPackageName |
Définissez ce paramètre sur le nom du package de l'application dans laquelle se trouve le service du fournisseur principal. | |
config_enableSecondaryLocationTimeZoneProvider |
false |
Cela active le LTZP secondaire. |
config_secondaryLocationTimeZoneProviderPackageName |
Définissez ce paramètre sur le nom du package de l'application dans laquelle se trouve le service du fournisseur secondaire. |
Par défaut, la clé config_enableGeolocationTimeZoneDetection
est définie sur true
dans la configuration AOSP, ce qui permet de prendre en charge la fonctionnalité de détection du fuseau horaire basé sur 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, avec cette configuration par défaut, les fabricants d'appareils peuvent activer et simuler les LTZP à partir de la ligne de commande à des fins de test. (Pour en savoir plus, consultez la section Déboguer et tester.)
API d'état des LTZP
Dans Android 14, les API LTZP prennent en charge les informations d'état de création de rapports LTZP. Cela permet au LTZP de signaler les problèmes que la plate-forme ne serait peut-être pas en mesure de 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 du LTZP a été dégradé par l'environnement de l'appareil est utile lorsque le mode de remplacement de la téléphonie est pris en charge. Par exemple, si une LTZP tierce qui s'appuie sur des paramètres ou des autorisations personnalisés pour que sa détection de position fonctionne s'exécute en mode dégradé ou est désactivée par les paramètres actuels de l'appareil, la LTZP peut signaler ces informations d'état aux composants de plate-forme internes tels que l'application Paramètres via la méthode reportSuggestion
. L'application Paramètres peut ensuite avertir les utilisateurs via des chaînes ou des personnalisations personnalisables que des paramètres doivent être modifiés pour que l'algorithme de localisation fonctionne correctement ou 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 un 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 un LTZP, les fabricants d'appareils doivent choisir un processus d'application pour héberger le service du LTZP. Un processus dédié pour un LTZP entraîne des coûts importants. Idéalement, le processus d'application choisi doit être exécuté 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 mise à jour de l'autre sont susceptibles de provoquer des problèmes de décalage de version. Pour en savoir plus, consultez la section Considérations sur l'adoption des fonctionnalités.
Documentation de référence AOSP LTZP
AOSP contient une implémentation de référence LTZP 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 sur un ensemble d'ID de fuseau horaire.
Un ensemble de données de référence dérivé d'autres projets Open Source est inclus avec le code source. Pour en savoir plus, consultez le fichier 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 l'emplacement.
Interagir avec le service location_time_zone_manager
Lorsque l'algorithme de localisation est compatible avec un appareil exécutant Android 12 ou une version ultérieure, Android instancie le service location_time_zone_manager
au démarrage.
Pour extraire l'état actuel de location_time_zone_manager
, utilisez:
adb shell cmd location_time_zone_manager dump
Pour afficher un ensemble complet d'options de ligne de commande pour faciliter les tests, utilisez:
adb shell cmd location_time_zone_manager 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_zone_detector
à des fins de test ou en production. Pour en savoir plus, consultez la section Configurer un appareil à l'aide du service device_config.
Les implémentations LTZP peuvent fournir leur propre assistance de débogage ou de test. Par exemple, vous pouvez utiliser la commande suivante pour déboguer la LTZP de référence AOSP lorsqu'elle est enregistrée dans le processus du serveur système:
adb shell dumpsys activity service android/com.android.timezone.location.provider.OfflineLocationTimeZoneProviderService