Wykrywanie strefy czasowej lokalizacji

Wykrywanie strefy czasowej lokalizacji, dostępne na urządzeniach z Androidem 12 i nowszym, to opcjonalna funkcja automatycznego wykrywania strefy czasowej, która umożliwia urządzeniom określanie strefy czasowej na podstawie lokalizacji i danych mapy stref czasowych.

Wykrywanie strefy czasowej lokalizacji to alternatywny mechanizm wykrywania strefy czasowej za pomocą telefonii. Ta funkcja nie wymaga telefonii, dlatego może być obsługiwana na urządzeniach o różnych kształtach, a nie tylko na urządzeniach mobilnych.

Funkcja wykrywania strefy czasowej lokalizacji składa się z tych komponentów na platformie AOSP:

  • Logika wykrywania strefy czasowej na serwerze systemu
  • Dostępna dla użytkownika opcja w Ustawieniach wprowadzona w Androidzie 12, która umożliwia wybór między mechanizmami wykrywania strefy czasowej na podstawie telefonii i lokalizacji.

  • System wtyczek do komponentów, które wykrywają lokalizację i mapują strefę czasową. Wtyczka nazywa się Location Time Zone Provider (LTZP) i na urządzeniu mogą być maksymalnie 2 takie wtyczki. Platforma udostępnia interfejsy API systemu, których należy używać do wdrażania LTZP.

  • Referencyjna implementacja LTZP.

  • Hostowanie narzędzi do generowania zbioru danych referencyjnych na podstawie danych z Open Street Map (OSM), które można wykorzystać w implementacji referencyjnej.

Prywatność użytkowników

Wykrywanie strefy czasowej lokalizacji obejmuje te funkcje ochrony prywatności użytkowników:

  • Jeśli jest dostępny przełącznik do wyboru algorytmu lokalizacji, użytkownicy mogą w każdej chwili wyłączyć algorytm lokalizacji.

  • Sugestie stref czasowych oparte na lokalizacji nie są udostępniane między użytkownikami na urządzeniu.

  • Użytkownicy mogą wyraźnie kontrolować wykrywanie lokalizacji na potrzeby wykrywania strefy czasowej na ekranie Ustawienia daty i godziny. Użytkownicy nie muszą wyraźnie przyznawać uprawnień w oknie dialogowym uprawnień.

  • Informacje o lokalizacji urządzenia nie są przekazywane do usług platformy Android. Zamiast tego:

    • Usługi wykrywania strefy czasowej otrzymują identyfikatory stref czasowych od LTZP, a nie lokalizację urządzenia. Jest to minimalny interfejs API potrzebny do obsługi wykrywania strefy czasowej lokalizacji.
    • Integratorzy systemów kontrolują działanie poszczególnych stref LTZP. Implementacje LTZP mogą korzystać z danych mapy stref czasowych przechowywanych w całości na urządzeniu z Androidem, z serwerów lub z podejścia hybrydowego.

Opis funkcji

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

location_time_zone_manager usługa jest odpowiedzialna za generowanie sugestii dla algorytmu lokalizacji time_zone_detector. Usługa location_time_zone_manager działa w procesie serwera systemowego.

Usługa location_time_zone_manager nie zawiera logiki wykrywania strefy czasowej. Ta usługa odpowiada za zarządzanie cyklem życia 1 lub 2 wtyczek LTZP.

Gdy wykrywanie strefy czasowej lokalizacji nie jest potrzebne, LTZP nie są uruchamiane. Oznacza to, że system wykrywania strefy czasowej lokalizacji nie prosi dostawców stref czasowych lokalizacji o śledzenie lokalizacji urządzenia, chyba że jest to wyraźnie wymagane. Oto niektóre przyczyny takiego zachowania:

  • W przeciwieństwie do sygnałów telefonicznych, które są odbierane pasywnie w ramach normalnych operacji telefonicznych, lokalizację można aktywnie pobierać od dostawców lokalizacji na Androidzie, co może powodować dodatkowe zużycie energii.
  • Ustawienia lokalizacji są powiązane z użytkownikiem, a Android musi uwzględniać bieżące ustawienia użytkownika.
  • Określanie lokalizacji urządzenia jest kwestią związaną z prywatnością.

Usługa location_time_zone_manager może też w razie potrzeby zaproponować niepewną sugestię, gdy bieżący użytkownik zmieni ustawienia, aby uniknąć udostępniania informacji o lokalizacji innym użytkownikom.

W wyniku tych wyborów wykrycie strefy czasowej może zająć kilka sekund po przełączeniu bieżącego algorytmu na lokalizację lub po przełączeniu bieżącego użytkownika. Zależy to też od implementacji używanych długoterminowych stref zerowej emisji.

Implementacja wykrywania strefy czasowej lokalizacji w AOSP umożliwia korzystanie z maksymalnie 2 wtyczek LTZP: podstawowej i dodatkowej, zgodnie z tą definicją:

główna LTZP
Działa przez cały czas, gdy użytkownik zezwoli na działanie funkcji wykrywania strefy czasowej na podstawie lokalizacji.
dodatkowa strefa LTZP,
Działa, jeśli podstawowy LTZP zgłosi, że strefa czasowa jest niepewna, zgłosi trwałą awarię lub przekroczy limit czasu podczas inicjowania. Zatrzymuje się, jeśli główny dostawca LTZP prześle określoną sugestię.

Jak pokazano na ilustracji 1, time_zone_detector otrzymuje sugestie dotyczące strefy czasowej z algorytmu telefonii lub lokalizacji. Algorytm lokalizacji otrzymuje sugestie z głównej lub dodatkowej strefy LTZP.

Informacje o wykrywaniu strefy czasowej lokalizacji

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

Wymagania dotyczące konfiguracji urządzenia

Aby obsługiwać funkcję strefy czasowej opartej na lokalizacji, urządzenia muszą być skonfigurowane za pomocą wtyczek LTZP, z których mogą korzystać. Aby wykrywanie strefy czasowej na podstawie lokalizacji działało i było widoczne dla użytkowników w Ustawieniach, na urządzeniach musi być włączony i skonfigurowany co najmniej jeden LTZP.

Konfiguracja urządzenia

W tej sekcji opisujemy, jak producenci urządzeń mogą skonfigurować urządzenia, aby obsługiwały wykrywanie strefy czasowej na podstawie lokalizacji.

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

Klucz konfiguracji Wartość AOSP Opis
config_enableGeolocationTimeZoneDetection true Jest to główne ustawienie 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łączona lub skonfigurowana co najmniej 1 strefa czasowa o długim okresie obowiązywania.

Ustawienie wartości na false całkowicie wyłącza tę funkcję, co pozwala zaoszczędzić trochę pamięci.
config_enablePrimaryLocationTimeZoneProvider false Włącza to główną strefę LTZP.
config_primaryLocationTimeZoneProviderPackageName Ustaw tę wartość na nazwę pakietu aplikacji, w której można znaleźć usługę głównego dostawcy.
config_enableSecondaryLocationTimeZoneProvider false Włącza to dodatkową strefę LTZP.
config_secondaryLocationTimeZoneProviderPackageName Ustaw tę wartość 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. Początkowo funkcja nie jest widoczna dla użytkowników, ponieważ AOSP domyślnie nie zawiera konfiguracji LTZP. Jednak w tej domyślnej konfiguracji producenci urządzeń mogą włączać i symulować LTZP z poziomu wiersza poleceń na potrzeby testowania. (Więcej informacji znajdziesz w artykule Debugowanie i testowanie).

Interfejsy API stanu LTZP

W Androidzie 14 interfejsy LTZP API obsługują informacje o stanie raportowania LTZP. Dzięki temu LTZP może zgłaszać problemy, których platforma nie jest w stanie wykryć samodzielnie, ponieważ komponenty wykrywania strefy czasowej platformy nie są bezpośrednio zaangażowane w wykrywanie lokalizacji ani strefy czasowej w algorytmie lokalizacji.

Możliwość zgłaszania, że działanie LTZP zostało pogorszone przez środowisko urządzenia, jest przydatna, gdy obsługiwany jest tryb awaryjny telefonii. Jeśli na przykład zewnętrzny dostawca LTZP, który do wykrywania lokalizacji potrzebuje niestandardowych ustawień lub uprawnień, działa w trybie ograniczonym lub jest wyłączony przez bieżące ustawienia urządzenia, może zgłosić te informacje o stanie do wewnętrznych komponentów platformy, takich jak aplikacja Ustawienia, za pomocą metody reportSuggestion. Aplikacja Ustawienia może następnie powiadamiać użytkowników za pomocą ciągów znaków lub dostosowań, że istnieją ustawienia, które należy zmienić, aby algorytm lokalizacji działał prawidłowo lub w ogóle.

Więcej informacji o stanach, które może zgłaszać LTZP, znajdziesz w sekcji TimeZoneProviderStatus.

Konfigurowanie i wdrażanie LTZP

Podczas konfigurowania LTZP postępuj zgodnie z instrukcjami w kodzie źródłowym w przypadku frameworks/base/core/java/android/service/timezone/TimeZoneProviderService.java. Komentarze Javadoc zawierają szczegółowe informacje o usłudze, wymaganych uprawnieniach i innych ustawieniach.

Aby skonfigurować LTZP, producenci urządzeń muszą wybrać proces aplikacji, w którym będzie hostowana usługa LTZP. Dedykowany proces LTZP wiąże się z dużym obciążeniem. Idealnie byłoby, gdyby wybranym procesem aplikacji był proces działający przez cały czas, np. serwer systemowy.

W przypadku urządzeń z modułowymi komponentami systemu (modułami) weź pod uwagę interakcję między danymi geograficznymi używanymi przez LTZP a regułami stref czasowych (tzdb) zawartymi w module danych stref czasowych (com.android.tzdata). Aktualizacje jednego z tych elementów bez aktualizacji drugiego mogą powodować problemy z różnicami w wersjach. Więcej informacji znajdziesz w artykule Wskazówki dotyczące wdrażania funkcji.

Dokumentacja AOSP LTZP

AOSP zawiera referencyjną implementację LTZP w folderze packages/modules/GeoTZ. Ta implementacja referencyjna korzysta z interfejsów API AOSP do określania lokalizacji urządzenia i używa pliku danych na urządzeniu do mapowania lokalizacji na zestaw identyfikatorów stref czasowych.

Kod źródłowy zawiera zestaw danych referencyjnych pochodzących z innych projektów open source. Więcej informacji znajdziesz w plikach README.md i LICENSE.

Debugowanie i testowanie

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

Interakcja z usługą location_time_zone_manager

Gdy algorytm lokalizacji jest obsługiwany na urządzeniu z Androidem 12 lub nowszym, Android tworzy instancję usługi location_time_zone_manager podczas uruchamiania.

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

adb shell cmd location_time_zone_manager dump

Aby wyświetlić obszerny zestaw opcji wiersza poleceń, które pomogą Ci w testowaniu, użyj tego polecenia:

adb shell cmd location_time_zone_manager help

W danych wyjściowych pomocy opisano też właściwości usługi device_config, których można używać do wpływania na działanie time_zone_detector na potrzeby testowania lub w środowisku produkcyjnym. Więcej informacji znajdziesz w artykule Konfigurowanie urządzenia za pomocą usługi device_config.

Implementacje LTZP mogą zapewniać własne wsparcie w zakresie debugowania lub testowania. Możesz na przykład użyć tego polecenia, aby debugować referencyjny LTZP AOSP, gdy jest on zarejestrowany w procesie serwera systemowego:

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