Détection du fuseau horaire de l'emplacement

La détection de fuseau horaire de localisation, disponible sur Android 12 ou version ultérieure, est une fonctionnalité de détection automatique de fuseau horaire en option 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 de localisation 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 de fuseau horaire de localisation comprend les composants suivants dans la plateforme AOSP :

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

  • Un système de plug-in pour les composants qui effectuent la détection de localisation et le mappage de fuseau horaire. Un plug-in est appelé fournisseur de fuseau horaire de localisation (LTZP) et il peut y en avoir jusqu'à deux sur un appareil. La plateforme fournit des API système qui doivent être utilisées pour mettre en œuvre un LTZP.

  • Une implémentation de référence LTZP.

  • Outils hôtes pour générer un ensemble de données de référence à partir de données OpenStreetMap pouvant être utilisé avec l'implémentation de référence.

Confidentialité des utilisateurs

La détection du fuseau horaire de localisation inclut les fonctionnalités de confidentialité des utilisateurs suivantes :

  • Lorsqu'il existe une bascule pour sélectionner l'algorithme de localisation, les utilisateurs peuvent désactiver l'algorithme de localisation à tout moment.

  • Les suggestions de fuseau horaire dérivées de l'emplacement 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 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 plateforme Android. Ce qui suit se produit à la place :

    • Les services de détection de fuseau horaire reçoivent des identifiants de fuseau horaire uniquement par le LTZP, et non par l'emplacement de l'appareil. Il s'agit de l'API minimale nécessaire pour prendre en charge la détection du fuseau horaire de localisation.
    • Le fonctionnement de chaque LTZP est laissé à la décision des intégrateurs de systèmes. Les implémentations LTZP peuvent utiliser les données cartographiques de fuseaux horaires entièrement conservées sur l'appareil Android, exploiter les serveurs ou utiliser une approche hybride.

Comportement des fonctionnalités

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. Il est responsable de la gestion du cycle de vie d'un ou deux plug-ins appelés Location Time Zone Providers (LTZP).

Lorsque la détection du fuseau horaire de l’emplacement n’est pas nécessaire, les LTZP ne sont pas démarrés. Cela signifie que le système de détection de fuseau horaire de localisation ne demande pas aux LTZP de suivre la position de l'appareil, à moins qu'ils n'y soient explicitement obligés. Certaines des raisons de ce comportement sont les suivantes :

  • Contrairement aux signaux téléphoniques reçus passivement dans le cadre des opérations téléphoniques normales, la localisation peut être activement demandée auprès des fournisseurs de localisation Android et peut consommer davantage d'énergie.
  • Les paramètres de localisation sont définis par l'utilisateur et Android doit respecter les paramètres de l'utilisateur actuel.
  • L'obtention de l'emplacement de l'appareil est sensible à la confidentialité.

De plus, le service location_time_zone_manager fait une suggestion incertaine (si nécessaire) lorsque l'utilisateur actuel change pour éviter de partager des informations de localisation entre utilisateurs.

En raison de ces choix, il faut généralement quelques secondes après le basculement de l'algorithme actuel vers l'emplacement, ou après le changement d'utilisateur actuel, avant que le fuseau horaire puisse être détecté. Cela dépend également de la mise en œuvre des LTZP utilisés.

L'implémentation de la détection du fuseau horaire de localisation AOSP autorise jusqu'à deux LTZP, un LTZP principal et un LTZP secondaire, comme défini ici :

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

Comme le montre la figure 1, les services time_zone_detector reçoivent des suggestions de fuseau horaire de l'algorithme de téléphonie ou de localisation. L'algorithme de localisation reçoit des suggestions du LTZP principal ou secondaire.

Flux d'informations de détection de fuseau horaire de localisation

Figure 1. Flux d'informations de détection de fuseau horaire de localisation.

Exigences de configuration de l'appareil

Pour prendre en charge la fonctionnalité de fuseau horaire de localisation, les appareils doivent être configurés avec des LTZP que l'appareil peut utiliser. Les appareils nécessitent qu'au moins un LTZP soit activé et configuré pour que la détection du fuseau horaire de localisation soit fonctionnelle et visible pour les utilisateurs dans Paramètres.

Configuration de l'appareil

Cette section décrit comment les fabricants d'appareils peuvent configurer les appareils pour prendre en charge la détection du 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_enableGeolocationTimeZoneDetection true Il s'agit du contrôle principal de la fonction de détection du fuseau horaire de localisation.

La fonctionnalité est prise en charge par défaut dans 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 entièrement la fonctionnalité pour une petite économie de mémoire.
config_enablePrimaryLocationTimeZoneProvider false Cela active le LTZP principal.
config_primaryLocationTimeZoneProviderPackageName Définissez ceci sur le nom du package de l’application où le service du fournisseur principal peut être trouvé.
config_enableSecondaryLocationTimeZoneProvider false Cela active le LTZP secondaire.
config_secondaryLocationTimeZoneProviderPackageName Définissez ceci sur le nom du package de l’application où le service du fournisseur secondaire peut être trouvé.

Par défaut, la configuration AOSP a la clé config_enableGeolocationTimeZoneDetection définie sur true , permettant la prise en charge de la fonctionnalité de détection de fuseau horaire de localisation. La fonctionnalité n'est pas visible initialement pour les utilisateurs car AOSP n'inclut pas de configuration LTZP par défaut. Cependant, en utilisant cette configuration par défaut, les fabricants de périphériques peuvent activer et simuler les LTZP à partir de la ligne de commande à des fins de test. (Pour plus d'informations, consultez Débogage et tests .)

API de statut LTZP

Dans Android 14, les API LTZP prennent en charge les informations sur l'état des rapports LTZP. Cela permet au LTZP de signaler des problèmes que la plateforme pourrait ne pas être en mesure de détecter par elle-même, car les composants de détection de fuseau horaire de la plateforme ne sont pas directement impliqués dans la détection de l'emplacement 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 secours téléphonique est pris en charge. Par exemple, si un LTZP tiers qui s'appuie sur des paramètres personnalisés ou des autorisations 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, il 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 via des chaînes ou des personnalisations personnalisables que certains paramètres doivent être modifiés pour que l'algorithme de localisation fonctionne correctement ou pas du tout.

Pour plus d'informations sur les statuts que le LTZP peut signaler, consultez TimeZoneProviderStatus .

Configuration et déploiement du fournisseur de fuseau horaire de localisation

Lors de la configuration d'un LTZP, lisez les instructions dans le code source pour frameworks/base/core/java/android/service/timezone/TimeZoneProviderService.java . Les commentaires Javadoc fournissent des détails sur le service, les autorisations nécessaires et d'autres configurations.

Pour configurer un fournisseur de fuseau horaire de localisation, les fabricants d'appareils doivent choisir un processus d'application pour héberger le service LTZP. Avoir un processus dédié pour un LTZP représente une surcharge importante ; idéalement, le processus d'application choisi est celui qui s'exécute à tout moment, comme le serveur système.

Sur les appareils dotés de composants système modulaires (modules), considérez l'interaction entre les données géographiques utilisées par le LTZP et les règles de fuseau horaire (tzdb) transportées dans le module Time Zone Data ( com.android.tzdata ). Les mises à jour de l’un sans mises à jour de l’autre sont susceptibles de provoquer des problèmes de version. Pour plus d’informations, consultez 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 l'emplacement de l'appareil et utilise un fichier de données sur l'appareil pour mapper l'emplacement à 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 plus de détails, 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 de fuseau horaire de localisation.

Interagissez 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 :

adb shell cmd location_time_zone_manager dump

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

adb shell cmd location_time_zone_manager 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 time_zone_detector à des fins de test ou en production. Pour plus d'informations, consultez Configuration d'un appareil à l'aide du service device_config .

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

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