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 par l'utilisateur dans les paramètres, introduite dans Android 12, pour permettre aux utilisateurs de choisir entre les mécanismes de détection du fuseau horaire pour la téléphonie et la localisation.
Système de plug-in pour les composants qui effectuent la détection de la position et la cartographie 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 LTZP de référence.
Des outils hôtes permettant de générer un ensemble de données de référence à partir des données OSM (Open Street Map) pouvant être utilisées avec la mise en œuvre 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 fuseau horaire 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 la position pour la détection du fuseau horaire via l'écran Paramètres de date et d'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 de fuseau horaire reçoivent des ID de fuseau horaire par le LTZP, et non par l'emplacement 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é sur la position n'est pas nécessaire, les requêtes LTZP ne sont pas lancées. 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 elles y sont explicitement tenues. Voici quelques-unes des 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 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és.
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 trafic lent secondaire
- S'exécute si le protocole LTZP principal signale que le fuseau horaire est incertain, une défaillance permanente ou un délai d'inactivité 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 être compatibles avec la fonctionnalité de fuseau horaire de localisation, les appareils doivent être configurés avec des protocoles LTZP qu'ils peuvent 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 une zone de disponibilité temporelle 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é pour économiser un peu de 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 où se trouve le service du fournisseur principal. | |
config_enableSecondaryLocationTimeZoneProvider |
false |
Cela active le LTZP secondaire. |
config_secondaryLocationTimeZoneProviderPackageName |
Définissez-le sur le nom du package de l'application dans laquelle se trouve le service du fournisseur secondaire. |
Par défaut, la clé config_enableGeolocationTimeZoneDetection
de la configuration AOSP est définie sur true
, ce qui permet d'utiliser la fonctionnalité de détection du fuseau horaire de localisation. 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 Déboguer et tester.)
API d'état 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 un LTZP tiers 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é par les paramètres actuels de l'appareil, le 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 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) appliquées dans le module de données de fuseau horaire (com.android.tzdata
). Les mises à jour de l'une sans mise à jour de l'autre sont susceptibles de provoquer des problèmes de décalage entre les versions. Pour en savoir plus, consultez la section Considérations sur l'adoption des fonctionnalités.
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 dans 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 équipé d'Android 12 ou 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 au débogage ou aux tests. 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