Wykrywanie strefy czasowej lokalizacji

Wykrywanie strefy czasowej na podstawie lokalizacji, dostępne w Androidzie 12 i wyższych, 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 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 wdrożenia referencyjnego;

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 wymagany 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 zmienić strefę czasową urządzenia na podstawie sugestii otrzymanych z 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 2 wtyczek LTZP.

Gdy wykrywanie strefy czasowej lokalizacji nie jest potrzebne, nie uruchamia się LTZP. Oznacza to, że system wykrywania strefy czasowej lokalizacji nie prosi o śledzenie lokalizacji urządzenia, chyba że jest to wyraźnie wymagane. Oto kilka przyczyn takiego zachowania:

  • W odróżnieniu od 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ć dodatkowej energii.
  • Ustawienia lokalizacji są ograniczone do użytkownika, a Android musi uwzględniać ustawienia bieżącego użytkownika.
  • Uzyskiwanie lokalizacji urządzenia jest związane z prywatnością.

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 tego powodu po zmianie bieżącego algorytmu na algorytm uwzględniający lokalizację lub po zmianie bieżącego użytkownika może minąć kilka sekund, zanim zostanie wykryta strefa czasowa. Zależy to również od implementacji używanych LTZP.

Implementacja wykrywania strefy czasowej lokalizacji w AOSP umożliwia użycie maksymalnie 2 wartości LTZP: podstawowej i dodatkowej, zdefiniowanych w ten sposób:

Podstawowy LTZP
Uruchamia się zawsze, gdy użytkownik zezwoli na korzystanie z 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 osiąga limit czasu podczas inicjalizacji. Zatrzymuje się, jeśli główny LTZP 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 wykrywanie 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 na false powoduje całkowite wyłączenie tej funkcji, co pozwala zaoszczędzić trochę pamięci.
config_enablePrimaryLocationTimeZoneProvider false W ten sposób włączysz główny 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 nie jest początkowo widoczna dla użytkowników, ponieważ AOSP domyślnie nie zawiera konfiguracji LTZP. Jednak przy użyciu tej konfiguracji domyślnej 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 raportowanie przez LTZP problemów, których platforma nie może wykryć samodzielnie, 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 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łaszać informacje o tym 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.

Konfiguracja i wdrożenie LTZP

Podczas konfigurowania LTZP przeczytaj instrukcje w kodzie źródłowym dotyczące 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.

AOSP reference LTZP

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

W kodzie źródłowym znajduje się zestaw danych referencyjnych pochodzących z innych projektów typu open source. Więcej informacji znajdziesz w pliku README.md i różnych plikach LICENCJA.

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

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 wygenerować bieżący stan 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 podczas 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