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 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 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 ta nosi nazwę Location Time Zone Provider (LTZP) i na urządzeniu mogą być maksymalnie 2 takie wtyczki. Platforma udostępnia systemowe interfejsy API, które muszą być używane 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ą 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 usług lokalizacyjnych 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 na Androidzie i może zużywać dodatkową energię.
- 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 również od implementacji używanych stref czasowych.
Implementacja wykrywania strefy czasowej lokalizacji w AOSP umożliwia korzystanie z maksymalnie 2 wtyczek LTZP: podstawowej i dodatkowej, zgodnie z tą definicją:
- podstawowa strefa 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łączona i skonfigurowana co najmniej jedna usługa 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 LTZP. 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 w konfiguracji AOSP klucz config_enableGeolocationTimeZoneDetection
jest 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 platformy do wykrywania strefy czasowej 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 LTZP innej firmy, która do wykrywania lokalizacji potrzebuje niestandardowych ustawień lub uprawnień, działa w trybie ograniczonym lub jest wyłączona przez bieżące ustawienia urządzenia, może zgłaszać 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 referencyjny zbiór danych pochodzący 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ż device_config
właściwości usługi, które mogątime_zone_detector
wpływać 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