Wykrywanie strefy czasowej lokalizacji

Wykrywanie strefy czasowej lokalizacji, dostępne w systemie Android 12 lub nowszym, to opcjonalna funkcja automatycznego wykrywania strefy czasowej, która umożliwia urządzeniom korzystanie z danych dotyczących lokalizacji i mapy stref czasowych w celu określenia strefy czasowej.

Wykrywanie strefy czasowej lokalizacji jest mechanizmem alternatywnym do wykrywania strefy czasowej w telefonii . Ponieważ ta funkcja nie wymaga telefonii, może być obsługiwana na urządzeniach o różnych kształtach, oprócz urządzeń telefonii komórkowej.

Funkcja wykrywania strefy czasowej lokalizacji składa się z następujących komponentów platformy AOSP:

  • Logika wykrywania strefy czasowej na serwerze systemowym.
  • Dostępna dla użytkownika opcja w Ustawieniach, wprowadzona w systemie Android 12, umożliwiająca użytkownikom wybór pomiędzy mechanizmami wykrywania strefy czasowej w zakresie telefonii i lokalizacji.

  • System wtyczek dla komponentów realizujących wykrywanie lokalizacji i mapowanie stref czasowych. Wtyczka nazywana jest dostawcą lokalizacji strefy czasowej (LTZP) i na urządzeniu mogą znajdować się maksymalnie dwie wtyczki. Platforma udostępnia systemowe API, które należy wykorzystać do wdrożenia LTZP.

  • Referencyjna implementacja LTZP.

  • Narzędzia hosta do generowania zestawu danych referencyjnych z danych OpenStreetMap , którego można użyć w implementacji referencyjnej.

Prywatność użytkownika

Wykrywanie strefy czasowej lokalizacji obejmuje następujące funkcje prywatności użytkownika:

  • Jeśli dostępny jest przełącznik umożliwiający wybór algorytmu lokalizacji, użytkownicy mogą w dowolnym momencie wyłączyć algorytm lokalizacji.

  • Sugestie dotyczące stref czasowych generowane na podstawie lokalizacji nie są udostępniane użytkownikom urządzenia.

  • Użytkownicy mogą bezpośrednio kontrolować wykrywanie lokalizacji w celu wykrywania strefy czasowej za pomocą ekranu Ustawienia daty i godziny . Użytkownicy nie muszą jawnie udzielać uprawnień w oknie dialogowym uprawnień.

  • Informacje o lokalizacji urządzenia nie są przekazywane do usług platformy Android. Zamiast tego dzieje się co następuje:

    • Usługi wykrywania stref czasowych wysyłają identyfikatory stref czasowych tylko przez LTZP, a nie lokalizację urządzenia. Jest to minimalny interfejs API potrzebny do obsługi wykrywania strefy czasowej lokalizacji.
    • Decyzję o działaniu poszczególnych LTZP pozostawia się integratorom systemów. Implementacje LTZP mogą wykorzystywać dane mapy stref czasowych przechowywane w całości na urządzeniu z systemem Android, wykorzystywać serwery lub korzystać z podejścia hybrydowego.

Zachowanie funkcji

Usługa time_zone_detector określa, kiedy zmienić bieżącą strefę czasową urządzenia na podstawie sugestii otrzymanych od algorytmów wykrywania.

location_time_zone_manager odpowiada za generowanie sugestii dotyczących algorytmu lokalizacji time_zone_detector . Usługa location_time_zone_manager działa w procesie serwera systemowego.

location_time_zone_manager nie zawiera żadnej logiki wykrywania strefy czasowej. Odpowiada za zarządzanie cyklem życia jednej lub dwóch wtyczek zwanych dostawcami lokalizacji stref czasowych (LTZP).

Gdy wykrywanie strefy czasowej lokalizacji nie jest potrzebne, LTZP nie są uruchamiane. Oznacza to, że system wykrywania strefy czasowej lokalizacji nie prosi urządzeń LTZP o śledzenie lokalizacji urządzenia, chyba że jest to wyraźnie wymagane. Niektóre z przyczyn tego zachowania są następujące:

  • W przeciwieństwie do sygnałów telefonicznych odbieranych pasywnie w ramach normalnych operacji telefonicznych, od dostawców usług lokalizacyjnych dla systemu Android można aktywnie żądać lokalizacji, co może zużywać dodatkową energię.
  • Ustawienia lokalizacji zależą od użytkownika i system Android musi szanować ustawienia bieżącego użytkownika.
  • Uzyskanie lokalizacji urządzenia jest kwestią poufną.

Ponadto location_time_zone_manager generuje niepewną sugestię (jeśli jest potrzebna), gdy bieżący użytkownik zmieni się, aby uniknąć udostępniania informacji o lokalizacji między użytkownikami.

W wyniku tych wyborów zwykle upływa kilka sekund po przełączeniu bieżącego algorytmu na lokalizację lub po przełączeniu bieżącego użytkownika, zanim będzie można wykryć strefę czasową. Zależy to również od implementacji używanych LTZP.

Implementacja wykrywania strefy czasowej lokalizacji AOSP umożliwia użycie maksymalnie dwóch LTZP, głównego i dodatkowego LTZP, jak zdefiniowano tutaj:

Podstawowy LTZP
Działa zawsze, gdy użytkownik zezwolił na uruchomienie funkcji wykrywania strefy czasowej lokalizacji.
Drugi LTZP
Uruchamia się, jeśli podstawowy LTZP zgłosi, że strefa czasowa jest niepewna , zgłosi trwałą awarię lub przekroczony zostanie limit czasu podczas inicjalizacji. Zatrzymuje się, jeśli główny LTZP prześle określoną sugestię.

Jak pokazano na rysunku 1, usługa time_zone_detector otrzymuje sugestie dotyczące strefy czasowej od algorytmu telefonii lub lokalizacji. Algorytm lokalizacji otrzymuje sugestie od podstawowego lub dodatkowego LTZP.

Przepływ informacji o wykryciu strefy czasowej lokalizacji

Rysunek 1. Przepływ informacji o wykryciu strefy czasowej lokalizacji.

Wymagania dotyczące konfiguracji urządzenia

Aby obsługiwać funkcję lokalizacji strefy czasowej, urządzenia muszą być skonfigurowane przy użyciu adresów LTZP, z których może korzystać. Aby wykrywanie strefy czasowej lokalizacji działało i było widoczne dla użytkowników w Ustawieniach, urządzenia wymagają włączenia i skonfigurowania co najmniej jednego LTZP.

Konfiguracja urzadzenia

W tej sekcji opisano, w jaki sposób producenci urządzeń mogą konfigurować urządzenia do obsługi wykrywania strefy czasowej lokalizacji.

Podstawowa konfiguracja AOSP znajduje się w frameworks/base/core/res/res/values/config.xml :

Klucz konfiguracyjny Wartość AOSP Opis
config_enableGeolocationTimeZoneDetection true Jest to główna kontrola funkcji wykrywania strefy czasowej lokalizacji.

Ta funkcja jest domyślnie obsługiwana w AOSP. Aby funkcja była dostępna dla użytkowników, musi być włączony lub skonfigurowany co najmniej jeden LTZP.

Ustawienie wartości na false powoduje całkowite wyłączenie tej funkcji w celu zaoszczędzenia niewielkiej ilości pamięci.
config_enablePrimaryLocationTimeZoneProvider false Włącza to podstawowy LTZP.
config_primaryLocationTimeZoneProviderPackageName Ustaw tę opcję na nazwę pakietu aplikacji, w której można znaleźć usługę głównego dostawcy.
config_enableSecondaryLocationTimeZoneProvider false Włącza to dodatkowy LTZP.
config_secondaryLocationTimeZoneProviderPackageName Ustaw tę opcję na nazwę pakietu aplikacji, w której można znaleźć usługę dodatkowego dostawcy.

Domyślnie konfiguracja AOSP ma klucz config_enableGeolocationTimeZoneDetection ustawiony na true , co umożliwia obsługę funkcji wykrywania strefy czasowej lokalizacji. Ta funkcja nie jest początkowo widoczna dla użytkowników, ponieważ AOSP nie zawiera domyślnie konfiguracji LTZP. Jednak korzystając z tej domyślnej konfiguracji, producenci urządzeń mogą włączać i symulować LTZP z wiersza poleceń na potrzeby testów. (Aby uzyskać więcej informacji, zobacz Debugowanie i testowanie .)

Interfejsy API stanu LTZP

W systemie Android 14 interfejsy API LTZP obsługują informacje o stanie raportowania LTZP. Umożliwia to LTZP zgłaszanie problemów, których platforma może nie być w stanie sama wykryć, ponieważ komponenty wykrywania strefy czasowej platformy nie są bezpośrednio zaangażowane w wykrywanie lokalizacji ani strefy czasowej w algorytmie lokalizacji.

Możliwość raportowania, że ​​zachowanie LTZP zostało pogorszone przez środowisko urządzenia, jest przydatna, gdy obsługiwany jest tryb awaryjny telefonii . Na przykład, jeśli narzędzie LTZP innej firmy, które opiera się na niestandardowych ustawieniach lub uprawnieniach do wykrywania lokalizacji, działa w trybie awaryjnym lub jest wyłączone przez bieżące ustawienia urządzenia, może zgłosić te informacje o stanie wewnętrznym komponentom platformy, takim jak aplikacja Ustawienia poprzez metodę reportSuggestion . Aplikacja Ustawienia może następnie powiadamiać użytkowników za pomocą dostosowywalnych ciągów znaków lub dostosowań, że istnieją ustawienia, które należy zmienić, aby algorytm lokalizacji działał dobrze lub w ogóle.

Aby uzyskać więcej informacji na temat stanów, które LTZP może zgłosić, zobacz TimeZoneProviderStatus .

Konfiguracja i wdrożenie dostawcy strefy czasowej lokalizacji

Konfigurując LTZP, przeczytaj instrukcje w kodzie źródłowym frameworks/base/core/java/android/service/timezone/TimeZoneProviderService.java . Komentarze Javadoc zawierają szczegółowe informacje na temat usługi, wymaganych uprawnień i innej konfiguracji.

Aby skonfigurować dostawcę lokalizacji strefy czasowej, producenci urządzeń muszą wybrać proces aplikacji, który będzie hostować usługę LTZP. Posiadanie dedykowanego procesu dla LTZP wiąże się z dużym obciążeniem; w idealnym przypadku wybrany proces aplikacji to taki, który działa przez cały czas, np. serwer systemowy.

Na urządzeniach z modułowymi komponentami systemu (modułami) należy wziąć pod uwagę interakcję między danymi geograficznymi używanymi przez LTZP a regułami strefy czasowej (tzdb) zawartymi w module danych strefy czasowej ( com.android.tzdata ). Aktualizacje jednego bez aktualizacji drugiego mogą powodować problemy z przesunięciem wersji. Aby uzyskać więcej informacji, zobacz temat Uwagi dotyczące przyjęcia funkcji .

Odniesienie AOSP LTZP

AOSP zawiera referencyjną implementację LTZP w packages/modules/GeoTZ . Ta referencyjna implementacja wykorzystuje interfejsy API AOSP do określenia lokalizacji urządzenia i wykorzystuje plik danych na urządzeniu do mapowania lokalizacji na zestaw identyfikatorów stref czasowych.

Do kodu źródłowego dołączony jest zestaw danych referencyjnych pochodzący z innych projektów open source. Więcej szczegółów znajdziesz w pliku README.md i różnych plikach LICENSE.

Debuguj i testuj

W poniższej sekcji opisano polecenia powłoki służące do debugowania i testowania funkcji wykrywania strefy czasowej lokalizacji.

Wejdź w interakcję z usługą Location_time_zone_manager

Jeśli algorytm lokalizacji jest obsługiwany na urządzeniu z systemem Android 12 lub nowszym, system Android tworzy instancję usługi location_time_zone_manager podczas uruchamiania.

Aby zrzucić bieżący stan location_time_zone_manager , użyj:

adb shell cmd location_time_zone_manager dump

Aby zobaczyć obszerny zestaw opcji wiersza poleceń ułatwiających testowanie, użyj:

adb shell cmd location_time_zone_manager help

Dane wyjściowe pomocy opisują również właściwości usługi device_config , których można użyć do wpływania na zachowanie time_zone_detector na potrzeby testowania lub w środowisku produkcyjnym. Aby uzyskać więcej informacji, zobacz Konfigurowanie urządzenia za pomocą usługi Device_config .

Implementacje LTZP mogą również zapewniać własne wsparcie w zakresie debugowania lub testowania. Na przykład możesz użyć następującego polecenia, aby debugować odwołanie AOSP LTZP, gdy jest ono zarejestrowane w procesie serwera systemowego.

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