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.
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