Wykrywanie strefy czasowej lokalizacji, dostępne w Androidzie 12 i nowszych wersjach, 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 do wykrywania strefy czasowej za pomocą telefonii. Ponieważ ta funkcja nie wymaga telefonii, może być obsługiwana na urządzeniach o różnych rozmiarach, 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 systemowym;
opcja dostępna dla użytkowników w Ustawieniach, wprowadzona w Androidzie 12, która umożliwia użytkownikom wybór między mechanizmami wykrywania strefy czasowej za pomocą telefonii i lokalizacji;
system wtyczek do komponentów, które wykrywają lokalizację i mapują strefę czasową; wtyczka jest nazywana dostawcą strefy czasowej lokalizacji (LTZP) i na urządzeniu mogą być maksymalnie 2 takie wtyczki; platforma udostępnia interfejsy API systemu, których należy używać do implementowania LTZP;
implementacja referencyjna LTZP;
narzędzia hosta do generowania referencyjnego zbioru danych na podstawie danych Open Street Map (OSM), których można używać z implementacją referencyjną.
Prywatność użytkowników
Wykrywanie strefy czasowej lokalizacji obejmuje te funkcje ochrony prywatności użytkowników:
Gdy dostępny jest przełącznik umożliwiający wybranie algorytmu lokalizacji, użytkownicy mogą w każdej chwili wyłączyć algorytm lokalizacji.
Sugestie dotyczące strefy czasowej oparte na lokalizacji nie są udostępniane użytkownikom 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 uprawnień.
Informacje o lokalizacji urządzenia nie są przekazywane do usług platformy Android. Zamiast tego dzieje się to:
- 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 LTZP. Implementacje LTZP mogą używać danych mapy stref czasowych przechowywanych w całości na urządzeniu z Androidem, serwerach lub hybrydowym podejściu.
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.
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 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 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 normalnych operacji telefonicznych, 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 respektować ustawienia bieżącego użytkownika.
- Uzyskiwanie lokalizacji urządzenia jest kwestią prywatności.
Ponadto usługa location_time_zone_manager w razie potrzeby wysyła niepewną sugestię, gdy bieżący użytkownik zmieni ustawienia, aby uniknąć udostępniania informacji o lokalizacji między użytkownikami.
W rezultacie po przełączeniu bieżącego algorytmu na lokalizację lub po przełączeniu bieżącego użytkownika wykrycie strefy czasowej zajmuje kilka sekund. Zależy to też od implementacji używanych LTZP.
Implementacja wykrywania strefy czasowej lokalizacji w AOSP umożliwia używanie maksymalnie 2 LTZP – podstawowego i dodatkowego, zgodnie z tymi definicjami:
- podstawowy LTZP
- Działa przez cały czas, gdy użytkownik zezwoli na działanie funkcji wykrywania strefy czasowej lokalizacji.
- dodatkowy 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 podstawowy LTZP prześle pewną sugestię.
Jak pokazano na ilustracji 1, usługa time_zone_detector otrzymuje sugestie dotyczące strefy czasowej z algorytmu telefonii lub lokalizacji. Algorytm lokalizacji otrzymuje sugestie z podstawowego lub dodatkowego LTZP.
Ilustracja 1. Przepływ informacji o wykrywaniu strefy czasowej lokalizacji.
Wymagania dotyczące konfiguracji urządzenia
Aby obsługiwać funkcję strefy czasowej lokalizacji, urządzenia muszą być skonfigurowane z LTZP, których urządzenie może używać. Aby funkcja wykrywania strefy czasowej lokalizacji działała i była widoczna dla użytkowników w Ustawieniach, na urządzeniach musi być włączony i skonfigurowany co najmniej 1 LTZP.
Konfiguracja urządzenia
W tej sekcji opisano, jak producenci urządzeń mogą konfigurować urządzenia do obsługi wykrywania strefy czasowej lokalizacji.
Podstawowa konfiguracja AOSP znajduje się w pliku
frameworks/base/core/res/res/values/config.xml:
| Klucz konfiguracji | Wartość AOSP | Opis |
|---|---|---|
config_enableGeolocationTimeZoneDetection |
true |
Jest to główny element sterujący funkcją 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 1 LTZP. Ustawienie wartości na false całkowicie wyłącza funkcję, co pozwala zaoszczędzić trochę pamięci. |
config_enablePrimaryLocationTimeZoneProvider |
false |
Włącza podstawowy LTZP. |
config_primaryLocationTimeZoneProviderPackageName |
Ustaw tę wartość na nazwę pakietu aplikacji, w której można znaleźć usługę podstawowego dostawcy. | |
config_enableSecondaryLocationTimeZoneProvider |
false |
Włącza dodatkowy 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 włącza obsługę funkcji wykrywania strefy czasowej lokalizacji. Ta funkcja nie jest początkowo widoczna dla użytkowników, ponieważ AOSP domyślnie nie zawiera konfiguracji LTZP.
Jednak dzięki tej konfiguracji domyślnej producenci urządzeń mogą włączać i symulować LTZP z poziomu wiersza poleceń na potrzeby testowania. (Więcej informacji znajdziesz w sekcji
Debugowanie i testowanie).
Interfejsy API stanu LTZP
W Androidzie 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 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 zachowanie LTZP zostało pogorszone przez środowisko urządzenia, jest przydatna, gdy obsługiwany jest tryb awaryjny telefonii. Jeśli
np. LTZP innej firmy, który do działania wykrywania lokalizacji wymaga niestandardowych ustawień lub uprawnień, działa w trybie ograniczonym lub jest wyłączony przez
bieżące ustawienia urządzenia, LTZP może zgłosić te informacje o stanie do wewnętrznych
komponentów platformy, takich jak aplikacja Ustawienia, za pomocą
reportSuggestion
metody. Aplikacja Ustawienia może wtedy powiadomić użytkowników za pomocą konfigurowalnych 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 artykule
TimeZoneProviderStatus.
Konfiguracja i wdrożenie LTZP
Podczas konfigurowania LTZP przeczytaj instrukcje w kodzie źródłowym dla
frameworks/base/core/java/android/service/timezone/TimeZoneProviderService.java.
Komentarze Javadoc zawierają szczegółowe informacje o usłudze, wymaganych uprawnieniach i innej konfiguracji.
Aby skonfigurować LTZP, producenci urządzeń muszą wybrać proces aplikacji, w którym będzie hostowana usługa LTZP. Używanie dedykowanego procesu dla LTZP jest kosztowne. Najlepiej wybrać proces aplikacji, 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 stref czasowych (tzdb)
zawartymi w module danych stref czasowych (com.android.tzdata). Aktualizacje jednego
bez aktualizacji drugiego mogą powodować problemy z wersjami. Więcej
informacji znajdziesz w sekcji Uwagi dotyczące wdrażania funkcji.
Referencyjny LTZP AOSP
AOSP zawiera referencyjną implementację LTZP w katalogu
packages/modules/GeoTZ. Ta implementacja referencyjna używa interfejsów API AOSP do określania lokalizacji urządzenia i pliku danych na urządzeniu do mapowania lokalizacji na zestaw identyfikatorów stref czasowych.
Kod źródłowy zawiera referencyjny zbiór danych pochodzący z innych projektów open source. Więcej informacji znajdziesz w pliku README.md i różnych plikach LICENCJI.
Debugowanie i testowanie
W tej sekcji opisano polecenia powłoki 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 dumpAby wyświetlić obszerny zestaw opcji wiersza poleceń, które pomogą w testowaniu, użyj tego polecenia:
adb shell cmd location_time_zone_manager helpDane wyjściowe pomocy opisują 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 debugowanie lub obsługę testowania. Możesz np. użyć tego polecenia, aby debugować referencyjny LTZP AOSP, gdy jest zarejestrowany w procesie serwera systemowego:
adb shell dumpsys activity service android/com.android.timezone.location.provider.OfflineLocationTimeZoneProviderService