Wykrywanie strefy czasowej lokalizacji

Wykrywanie strefy czasowej lokalizacji, dostępne na Androidzie 12 i nowszych, to opcjonalna funkcja automatycznego wykrywania strefy czasowej, która umożliwia urządzeniom określenie strefy czasowej na podstawie danych o lokalizacji i mapie strefy czasowej.

Wykrywanie strefy czasowej lokalizacji jest alternatywnym mechanizmem w stosunku do wykrywania strefy czasowej przez telefon. Ta funkcja nie wymaga telefonii, więc może być obsługiwana na urządzeniach o różnych formach, a nie tylko na telefonach komórkowych.

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

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

  • System wtyczek dla komponentów, które wykonują wykrywanie lokalizacji i mapowanie stref czasowych. Ten dodatek nosi nazwę Location Time Zone Provider (LTZP) i może być ich na urządzeniu maksymalnie 2. Platforma udostępnia interfejsy API systemu, których należy używać do implementowania LTZP.

  • Referencyjna implementacja LTZP.

  • narzędzia hosta do generowania zbioru danych referencyjnych na podstawie danych Open Street Map (OSM), które można wykorzystać w ramach implementacji referencyjnej;

Prywatność użytkowników

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

  • Jeśli istnieje przełącznik do wyboru algorytmu lokalizacji, użytkownicy mogą go w każdej chwili wyłączyć.

  • Sugerowane strefy czasowe oparte na lokalizacji nie są udostępniane użytkownikom na jednym urządzeniu.

  • Użytkownicy mogą kontrolować wykrywanie lokalizacji na potrzeby wykrywania strefy czasowej, korzystając z ekranu ustawień Data i godzina. Użytkownicy nie muszą wyraźnie przyznawać uprawnień w oknie z prośbą o uprawnienia.

  • 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 od lokalizacji urządzenia. To minimalny interfejs API potrzebny do obsługi wykrywania strefy czasowej lokalizacji.
    • Integratorzy systemów kontrolują działanie poszczególnych systemów LTZP. Implementacje LTZP mogą używać danych mapy stref czasowych przechowywanych całkowicie na urządzeniu z Androidem, używać serwerów lub stosować podejście hybrydowe.

Opis funkcji

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

Usługa location_time_zone_manager odpowiada 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 żadnej logiki wykrywania strefy czasowej. Ta usługa odpowiada za zarządzanie cyklem życia jednej lub dwóch wtyczek LZP.

Gdy wykrywanie strefy czasowej lokalizacji nie jest potrzebne, nie uruchamia się LTZP. Oznacza to, że system wykrywania strefy czasowej lokalizacji nie prosi sieci LTZP 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 normalnej obsługi telefonicznej, lokalizacja może być aktywnie żądana od dostawców lokalizacji Androida i może zużywać dodatkową energię.
  • Ustawienia lokalizacji są ograniczone do użytkownika, a Android musi uwzględniać ustawienia bieżącego użytkownika.
  • Pozyskiwanie lokalizacji urządzenia narusza prywatność.

Ponadto usługa location_time_zone_manager może (w razie potrzeby) wyświetlić użytkownikowi niepewną sugestię, gdy ten zmieni ustawienia, aby uniknąć udostępniania informacji o lokalizacji innym użytkownikom.

Z powodu tych wyborów wykrycie strefy czasowej zajmuje kilka sekund po przełączeniu bieżącego algorytmu na lokalizację lub po zmianie bieżącego użytkownika. To zależy też od implementacji używanych LTZP.

Implementacja wykrywania strefy czasowej lokalizacji AOSP dopuszcza maksymalnie 2 LTZP, główny i dodatkowy kanał LTZP, jak opisano poniżej:

Podstawowy LTZP
Uruchamia się zawsze, gdy użytkownik zezwolił na uruchomienie funkcji wykrywania strefy czasowej lokalizacji.
Dodatkowy LTZP
Wykonuje się, jeśli podstawowy LTZP zgłasza, że strefa czasowa jest niepewna, zgłasza trwałą awarię lub kończy się czas oczekiwania na inicjalizację. Zatrzymuje się, jeśli główny dostawca znaku towarowego prześle określoną sugestię.

Jak widać na rysunku 1, usługa time_zone_detector otrzymuje sugestie dotyczące strefy czasowej z telefonu lub algorytmu lokalizacji. Algorytm lokalizacji otrzymuje sugestie z głównego lub dodatkowego LTZP.

Przepływ informacji 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 na podstawie lokalizacji, urządzenia muszą być skonfigurowane z użyciem LTZP, których mogą używać. Aby wykrywanie strefy czasowej na podstawie lokalizacji było widoczne i działające dla użytkowników w Ustawieniach, na urządzeniach musi być włączona co najmniej 1 lokalizacja czasowa.

Konfiguracja urządzenia

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

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

Klucz konfiguracji Wartość AOSP Opis
config_enableGeolocationTimeZoneDetection true 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, musisz włączyć lub skonfigurować co najmniej 1 usługę LTZP.

Ustawienie wartości false powoduje całkowite wyłączenie tej funkcji z zachowaniem niewielkiego oszczędności pamięci.
config_enablePrimaryLocationTimeZoneProvider false Spowoduje to włączenie głównego LTZP.
config_primaryLocationTimeZoneProviderPackageName Ustaw nazwę pakietu aplikacji, w której znajduje się usługa głównego dostawcy.
config_enableSecondaryLocationTimeZoneProvider false Umożliwi to użycie dodatkowego LTZP.
config_secondaryLocationTimeZoneProviderPackageName Ustaw nazwę pakietu aplikacji, w której znajduje się usługa dostawcy dodatkowego.

Domyślnie w konfiguracji AOSP klucz config_enableGeolocationTimeZoneDetection ma wartość true, co umożliwia obsługę funkcji wykrywania strefy czasowej lokalizacji. Funkcja początkowo nie jest widoczna dla użytkowników, ponieważ domyślnie AOSP nie zawiera konfiguracji LTZP. Jednak przy użyciu tej domyślnej konfiguracji producenci urządzeń mogą włączyć 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 API LTZP obsługują informacje o stanie LTZP. Umożliwia to platformie LTZP zgłaszanie problemów, których sama nie może wykryć, ponieważ komponenty wykrywania strefy czasowej nie są bezpośrednio zaangażowane w wykrywanie lokalizacji ani strefy czasowej w algorytmie lokalizacji.

Możliwość zgłaszania informacji o tym, ż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 system LTZP, który korzysta z ustawień niestandardowych lub uprawnień do wykrywania lokalizacji, działa w trybie ograniczonym lub jest wyłączony przez bieżące ustawienia urządzenia, może zgłaszać informacje o stanie do wewnętrznych komponentów platformy, takich jak aplikacja Ustawienia, za pomocą metody reportSuggestion. Aplikacja Ustawienia może wtedy powiadomić użytkowników za pomocą dostosowywanych ciągów znaków lub dostosowań, że niektóre ustawienia muszą zostać zmienione, aby algorytm lokalizacji działał prawidłowo lub w ogóle.

Więcej informacji o stanach, które może raportować usługa LTZP, znajdziesz w artykule TimeZoneProviderStatus.

Konfigurowanie i wdrażanie LTZP

Podczas konfigurowania interfejsu LTZP przeczytaj instrukcje dotyczące kodu źródłowego w sekcji frameworks/base/core/java/android/service/timezone/TimeZoneProviderService.java. Komentarze Javadoc zawierają informacje o usłudze, wymaganych uprawnieniach i innych ustawieniach.

Aby skonfigurować LTZP, producenci urządzeń muszą wybrać proces aplikacji, który będzie hostować usługę LTZP. Użycie dedykowanego procesu w przypadku LTZP wiąże się z wysokimi kosztami. W idealnej sytuacji wybrany proces aplikacji powinien być uruchamiany przez cały czas, np. serwer systemowy.

Na urządzeniach z modułowymi komponentami systemu (modułów) należy wziąć pod uwagę interakcję między danymi geograficznymi używanymi przez LTZP a regułami stref czasowych (tzdb) przechowywanymi w module danych strefy czasowej (com.android.tzdata). Aktualizacja jednego z nich bez aktualizacji drugiego może spowodować problemy z różnicami w wersjach. Więcej informacji znajdziesz w artykule Uwzględnienie funkcji.

Referencyjny AOSP – LTZP

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

Wraz z kodem źródłowym dołączany jest zbiór danych referencyjnych pozyskany z innych projektów open source. Więcej informacji znajdziesz w pliku README.md i różnych plikach LICENCJA.

Debugowanie i testowanie

W tej sekcji opisujemy polecenia powłoki do debugowania i testowania funkcji wykrywania strefy czasowej lokalizacji.

Interakcja z usługą location_time_zone_manager

Jeśli 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 skopiować bieżący stan instancji location_time_zone_manager, użyj:

adb shell cmd location_time_zone_manager dump

Aby wyświetlić obszerny zestaw opcji wiersza poleceń, które ułatwiają testowanie, użyj:

adb shell cmd location_time_zone_manager help

W wyniku pomocy opisano też właściwości usługi device_config, których można używać do wpływania na zachowanie usługi time_zone_detector w celu testowania lub w produkcji. Więcej informacji znajdziesz w artykule Konfigurowanie urządzenia za pomocą usługi device_config.

Implementacje LTZP mogą zapewniać własne funkcje debugowania lub testowania. Aby debugować referencyjny LTZP AOSP, gdy jest on zarejestrowany w systemowym procesie serwera, możesz użyć tego polecenia:

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