Na tej stronie opisano, jak działa wykrywanie czasu i strefy czasowej na urządzeniach z Androidem. Obejmuje to sposób automatycznego wykrywania czasu i stref czasowych przez Androida, opcje konfiguracji dla producentów urządzeń oraz informacje o testowaniu.
Omówienie czasu i stref czasowych
Aby określić czas lokalny użytkownika do wyświetlania w miejscach takich jak pasek stanu, Android śledzi 2 powiązane, ale niezależne stany:
- Bieżący czas uniksowy
- bieżąca strefa czasowa,
Aktualny czas Unixa i aktualna strefa czasowa są stanami dotyczącymi całego urządzenia, co oznacza, że są współdzielone przez wszystkich jego użytkowników.
Bieżący czas ery Unixa nie jest wartością stałą. Jest on aktualizowany automatycznie, aby odzwierciedlać upływ czasu. Oprócz normalnego upływu czasu bieżący czas Unixa urządzenia jest dostosowywany, jeśli okaże się nieprawidłowy, na przykład po wyłączeniu zasilania.
Obecna strefa czasowa określa korektę, która ma być zastosowana do przekształcenia bieżącego czasu uniksowego w czas lokalny. Na przykład latem w Los Angeles urządzenie odejmuje 7 godzin od bieżącego czasu Unixa, a zimą – 8 godzin.
Aby obsługiwać te obliczenia czasu lokalnego, wszystkie urządzenia z Androidem mają bazę danych ze wszystkimi globalnymi regułami stref czasowych. Więcej informacji o regułach stref czasowych znajdziesz w artykule Reguły stref czasowych.
Gdy użytkownik podróżuje do nowego miejsca, w którym obowiązuje inna strefa czasowa, bieżący czas Unixa nie musi być dostosowywany, ale użytkownik zazwyczaj chce widzieć czas lokalny, a nie czas z poprzedniej lokalizacji. Zmiana bieżącej strefy czasowej zapewnia, że do bieżącego czasu Unixa zostanie zastosowana prawidłowa różnica czasu, aby wyświetlić prawidłowy czas lokalny dla nowej lokalizacji.
AOSP umożliwia użytkownikom samodzielne określanie, czy czas i strefa czasowa mają być ustawiane automatycznie za pomocą tych mechanizmów.
- Automatyczne wykrywanie czasu: zapewnia, że urządzenie ma prawidłowy bieżący czas uniksowy Unixa.
- Automatyczne wykrywanie strefy czasowej: zapewnia, że urządzenie ma prawidłową strefę czasową.
Automatyczne wykrywanie czasu
W tej sekcji znajdziesz przegląd usługi time_detector
, która zarządza automatycznym wykrywaniem czasu, ustawieniami użytkownika, opcjami konfiguracji i szczegółami testów.
Usługa time_detector
Usługa time_detector
, dostępna na urządzeniach z Androidem 10 lub nowszym, zarządza automatycznym wykrywaniem czasu. W razie potrzeby dostosowuje bieżący czas Unixa na urządzeniu, gdy włączona jest automatyczna funkcja wykrywania czasu.
Usługa time_detector
ma zawsze jeden z 2 stanów: niepewny lub pewny. Stan pewny lub niepewny usługi jest określany na podstawie sugestii dotyczących czasu, które usługa otrzymuje z różnych źródeł.
Gdy usługa time_detector
jest pewna, że otrzymała propozycję z informacją o czasie epoki Unix, zastępuje bieżący czas epoki Unix, jeśli propozycja czasu różni się od bieżącego czasu epoki Unix.
Jeśli time_detector
jest niepewne, nie zastępuje bieżącej godziny. Stan niepewny zwykle oznacza, że usługa time_detector
nie otrzymała sugestii dotyczących czasu. Usługa time_detector
staje się niepewna, jeśli otrzymane przez nią sugestie są zbyt stare, aby można było ich użyć. Uwzględnia się wiek sugestii, ponieważ korekty za pomocą starych sugestii czasu uniksowego w epoce Unixa opierają się na upływającym czasie rzeczywistym na urządzeniu, który po dłuższym czasie może być nieprecyzyjny.
Aby automatycznie ustalić bieżący czas Unixa, urządzenie może korzystać z różnych źródeł. W tym dokumencie są one określane jako źródła. Usługa time_detector
traktuje sekwencje sugestii jako odrębne w zależności od ich pochodzenia.
Usługa time_detector
jest stanowa, co oznacza, że przechowuje rekordy dotyczące najnowszych sugestii przesłanych przez każdą domenę. Nowe sugestie są wysyłane do time_detector
, jeśli źródło ma dostępne nowsze informacje o czasie w epoce Unixa. Usługa time_detector
ponownie ocenia nowe i dotychczasowe sugestie oraz aktualizuje stan urządzenia po otrzymaniu sugestii.
Chociaż czas UTC jest uzgodniony na całym świecie, z różnych powodów ustalenie bieżącego czasu ery Unixa nie zawsze jest proste w przypadku urządzenia z Androidem:
- Czas epoki uniksowej to system pomiaru czasu nieco inny niż czas UTC. Przekształcanie czasu w jednym systemie na czas w drugim wymaga znajomości momentu wystąpienia sekund nadliczeniowych oraz sposobu ich obsługi przez źródła.
- Początki mogą być dostępne tylko w określonych momentach lub w określonych okolicznościach. Jeśli na przykład źródło wymaga połączenia z internetem, może być dostępne tylko wtedy, gdy urządzenie jest połączone z internetem.
- Źródła mogą być niedokładne lub zawierać błędy. Jeśli na przykład wieża telefonii komórkowych nie śledzi prawidłowo „czasu uniwersalnego”, źródło telefonii może podawać niedokładne sugestie dotyczące czasu.
- Podczas uzyskiwania czasu epoki Unixa mogą wystąpić niedokładności. Na przykład opóźnienie w sieci, buforowanie lub harmonogramowanie procesów mogą spowodować, że czas ery Unixa będzie niedokładny.
- Zegar referencyjny używany do dostosowywania sugestii do upływu czasu od momentu otrzymania sugestii może być niedokładny.
W AOSP domyślnie skonfigurowano 2 główne źródła wykrywania czasu:
- Sieć: korzysta z serwerów czasu NTP (Network Time Protocol).
- Telefonia: korzysta z identyfikatora sieci i znaków strefy czasowej (NITZ).
Zarówno źródła telefoniczne, jak i sieciowe wymagają połączenia z sieciami zewnętrznymi, które nie zawsze są dostępne.
Od Androida 12 Android obsługuje też te źródła, które nie są domyślnie skonfigurowane do użycia:
- GNSS: korzysta z usługi lokalizacji GPS do uzyskiwania czasu ze źródła GNSS.
- Zewnętrzny: ogólny źródło, które pozwala producentom urządzeń zintegrować własne źródło czasu ery Unixa.
Ustawienia czasu
Użytkownicy mogą włączyć automatyczne wykrywanie czasu w sekcji System > Data i godzina w aplikacji Ustawienia AOSP.
Rysunek 1. Automatyczne wykrywanie czasu w Ustawieniach.
W tabeli poniżej opisano ustawienia użytkownika dotyczące wykrywania czasu w aplikacji Ustawienia AOSP.
*W Androidzie 11 i starszych to ustawienie ma etykietę Użyj czasu podanego przez sieć. |
|||
Lokalizacja ustawień AOSP | Nazwa ustawień AOSP | Zakres | Działanie |
---|---|---|---|
System > Data i godzina | Ustawianie czasu automatycznie* | Wszyscy użytkownicy | przełącznik; Gdy opcja jest włączona, urządzenie odpowiada za wykrywanie bieżącego czasu Unixa. Gdy opcja jest wyłączona, użytkownicy mogą ręcznie ustawiać czas na urządzeniu. |
Gdy użytkownik podaje czas ręcznie, wpisze swój czas lokalny, a nie czas Unixa. Aktualny czas uniksowy jest obliczany na podstawie bieżącej strefy czasowej, aby uzyskać czas uniksowy.
Konfiguracja
Producenci urządzeń mogą konfigurować usługę time_detector
na różne sposoby, na przykład określić, których źródeł używać i jak ustalać priorytety sygnałów z tych źródeł.
Priorytety punktów początkowych
Od Androida 12 producenci urządzeń mogą zmieniać plik konfiguracji core/res/res/values/config.xml
, aby określić, które źródła czasu uwzględnić w automatycznym wykrywaniu czasu, oraz priorytet, z jakim time_detector
ma je traktować.
W przypadku urządzeń z Androidem 11 lub starszym priorytet pochodzenia jest zakodowany na ["telephony", "network"]
, co oznacza, że sugestie dotyczące telefonii mają wyższy priorytet niż sugestie dotyczące sieci.
Domyślna konfiguracja AOSP:
<!-- Specifies priority of automatic time sources. Suggestions from higher entries in the list
take precedence over lower ones.
See com.android.server.timedetector.TimeDetectorStrategy for available sources. -->
<string-array name="config_autoTimeSourcesPriority">
<item>network</item>
<item>telephony</item>
</string-array>
W Androidzie 12 sugestie dotyczące sieci i telefonu są domyślnie skonfigurowane jako źródła. Propozycje dotyczące czasu sieci mają wyższy priorytet niż propozycje dotyczące czasu telefonicznego. Producenci urządzeń mogą zmienić kolejność źródeł, aby przywrócić działanie systemu Android 11 lub starszego, w którym usługi telefoniczne mają wyższy priorytet.
Domyślnie, jeśli prawidłowa sugestia o najwyższym priorytecie pasuje do bieżącego czasu systemowego urządzenia z dokładnością do kilku sekund, czas na urządzeniu nie zostanie zmieniony. Ma to na celu uniknięcie tworzenia pracy dla zainstalowanych aplikacji, które nasłuchują zamiaru ACTION_TIME_CHANGED
.
Dozwolone wartości źródła:
- Sieć
- Połączenia telefoniczne
- GNSS
- Zewnętrzny
Dozwolone przedziały czasowe
Android 14 wprowadza górny limit czasowy dla sugestii dotyczących czasu otrzymanych przez usługę time_detector
. Jeśli urządzenie obsługuje procesy 32-bitowe, platforma ustawia górną granicę czasu, aby zapobiec używaniu przez urządzenie sugestii czasu, która mogłaby wywołać problem z rokiem 2038.
Android 12 wprowadził krótszy limit czasu, który służy do sprawdzania poprawności sugestii czasu otrzymanej przez usługę time_detector
. Niższa wartość ograniczająca czas używana do automatycznych sugestii jest ustawiana na podstawie sygnatury czasowej kompilacji.
Działa to na zasadzie, że prawidłowy czas nie może być wcześniejszy niż czas utworzenia obrazu systemu urządzenia. Jeśli sugerowany czas jest krótszy niż dolny limit czasu, usługa time_detector
odrzuca tę sugestię, ponieważ nie może być ona ważna, jeśli sygnatura czasowa kompilacji jest poprawna.
W przypadku urządzeń z Androidem 11 lub starszym usługa time_detector
nie weryfikuje przychodzących sugestii dotyczących czasu Unixa.
Czas poświęcony na debugowanie i testowanie
Z tej sekcji dowiesz się, jak debugować i testować zachowanie usługi time_detector
oraz innych komponentów udostępnianych przez wszystkie źródła.
Interakcja z usługą time_detector
Aby wyświetlić konfigurację usługi time_detector
i stan usługi time_detector
, użyj:
adb shell cmd time_detector dump
Aby zobaczyć dodatkowe polecenia do debugowania i testowania wykrywania strefy czasowej, użyj:
adb shell cmd time_detector help
Wyjście pomocy zawiera też opis właściwości usługi device_config, które można wykorzystać do wpływania na działanie usługi time_detector
w wersji testowej lub produkcyjnej.
Szczegółowe informacje znajdziesz w artykule Konfigurowanie urządzenia za pomocą usługi device_config.
Aby zweryfikować automatyczne wykrywanie czasu, testerzy muszą wiedzieć, których źródeł używa usługa time_detector
. Poniżej znajdziesz przykład danych wyjściowych polecenia adb shell cmd time_detector dump
, w których informacje o bieżącym pochodzeniu i stanie usługi są wyróżnione pogrubioną czcionką:
$ adb shell cmd time_detector dump
TimeDetectorStrategy:
mLastAutoSystemClockTimeSet=null
mEnvironment.isAutoTimeDetectionEnabled()=true
mEnvironment.elapsedRealtimeMillis()=23717241
mEnvironment.systemClockMillis()=1626707861336
mEnvironment.systemClockUpdateThresholdMillis()=2000
mEnvironment.autoTimeLowerBound()=2021-07-19T07:48:05Z(1626680885000)
mEnvironment.autoOriginPriorities()=[network,telephony]
Time change log:
...
Telephony suggestion history:
...
Network suggestion history:
...
Gnss suggestion history:
...
External suggestion history:
...
Informacje te można interpretować w ten sposób:
Klucz | Wartość |
---|---|
mEnvironment.isAutoTimeDetectionEnabled() |
Określa, czy automatyczne wykrywanie czasu jest włączone. |
mEnvironment.autoTimeLowerBound() |
Bieżąca dolna granica używana do sprawdzania sugestii dotyczących czasu. |
mEnvironment.autoOriginPriorities() |
Używane źródła i ich kolejność priorytetów. |
Dziennik zmian czasu wskazuje, kiedy usługa time_detector
zmieniła bieżący czas uniksowy urządzenia.
Informacje o historii sugestii wskazują, jakie sugestie zostały przesłane z każdego źródła.
Automatyczne wykrywanie strefy czasowej
W tej sekcji znajdziesz omówienie usługi time_zone_detector
, która zarządza automatycznym wykrywaniem strefy czasowej, kontrolkami użytkownika w ustawieniach, wykrywaniem strefy czasowej w telefonii i lokalizacji oraz szczegółami testów.
Usługa time_zone_detector
Usługa time_zone_detector
, dostępna na urządzeniach z Androidem 11 lub nowszym, zarządza automatycznym wykrywaniem strefy czasowej. W przypadku włączonego automatycznego wykrywania strefy czasowej dostosowuje bieżącą strefę czasową urządzenia.
Gdy automatyczne wykrywanie strefy czasowej jest włączone, time_zone_detector
może mieć jeden z 2 stanów: niepewny lub pewny.
Gdy usługa time_zone_detector
jest w określonym stanie, oznacza to, że usługa time_zone_detector
otrzymała silne informacje o strefie czasowej, co może spowodować zastąpienie bieżącej strefy czasowej. Jeśli nie ma pewności, oznacza to, że usługa nie otrzymała żadnych informacji lub otrzymała tylko informacje o niskim poziomie ufności, co oznacza, że nie zastąpi ona bieżącego czasu lokalnego.
Niektóre stany usługi time_zone_detector
mogą obejmować stany, w których time_zone_detector
nie ma informacji o strefach czasowych lub ma do wyboru kilka stref czasowych. Stany te to:
- W przypadku, gdy urządzenie znajduje się w miejscu bez strefy czasowej, np. na wodach międzynarodowych lub w strefie spornej, wprowadzany jest stan z zerową strefą czasową. Ten stan jest podobny do stanu niepewnego, ale wskazuje, że
time_zone_detector
nie musi podejmować dalszych działań w celu określenia strefy czasowej. - Wprowadzany jest stan z wieloma strefami czasowymi, w którym występują niejednoznaczne lub graniczne warunki. W tym stanie, jeśli bieżąca strefa czasowa jest jedną z tych, co do których
time_zone_detector
jest pewność, bieżąca strefa czasowa pozostaje bez zmian. W przeciwnym razie używana jest jedna z dostępnych stref czasowych. Dzięki temutime_zone_detector
ma element przywiązania, jeśli użytkownik wcześniej ręcznie wybrał strefę czasową lub gdy urządzenie zbliża się do granicy.
Stan pewny lub niepewny usługi time_zone_detector
jest określany przez sugestie dotyczące strefy czasowej wysyłane przez algorytm.
Zasadniczo sugestie dzielą się na 2 typy, które ściśle odpowiadają możliwym stanom time_zone_detector
: pewny i niepewny. Oto przykłady typów sugestii:
type =
uncertain
,zoneIds = []
- Algorytm nie wie, jaka jest strefa czasowa.
type =
certain
,zoneIds = ["Europe/London"]
- Algorytm jest pewien, że strefa to Europe/London.
type =
certain
,zoneIds = []
`- Algorytm jest pewny, ale z bieżącą lokalizacją nie jest powiązany żaden identyfikator strefy.
type =
certain
,zoneIds = ["America/Denver", "America/Phoenix"]
- Algorytm jest pewien, że odpowiedź to jedna z tych 2 stref, ale nie może wybrać „America/Denver” ani „America/Phoenix”.
Usługa time_zone_detector
traktuje sekwencje sugestii jako odrębne na podstawie ich algorytmu. W zależności od algorytmu sugestie mogą też zawierać metadane, które wskazują, jak pewny jest algorytm.
Usługa time_zone_detector
jest stanowa, co oznacza, że przechowuje rekordy najnowszych sugestii wprowadzonych przez każdy algorytm. Nowe sugestie są wysyłane do usługi time_zone_detector
, jeśli poprzednia sugestia nie jest już prawidłowa, czyli algorytm ma teraz inną sugestię lub nie może już wykryć strefy czasowej. Usługa time_zone_detector
ponownie ocenia nowe i dotychczasowe sugestie oraz aktualizuje stan urządzenia po otrzymaniu sugestii.
Android obsługuje 2 algorytmy wykrywania strefy czasowej:
- Połączenia telefoniczne
- Lokalizacja
Usługa time_zone_detector
zwykle do określania strefy czasowej używa jednego algorytmu. Jeśli algorytm lokalizacji jest obsługiwany na urządzeniu, algorytm używany przez urządzenie jest określany na podstawie ustawień strefy czasowej skonfigurowanych przez użytkownika. Gdy algorytm nie jest pewien strefy czasowej, time_zone_detector
zazwyczaj nie korzysta z sugestii pochodzących z innego algorytmu. Propozycje powiązane z nieużywanymi algorytmami mogą być przechowywane w pamięci przez time_zone_detector
, ale nie są używane, chyba że algorytm ulegnie zmianie. Gdy użytkownik zmieni ustawienia automatycznego wykrywania strefy czasowej i zmieni się algorytm, zostanie użyta najnowsza sugestia dostępna dla nowego algorytmu.
Więcej informacji o sytuacji, w której do określenia strefy czasowej używa się kilku algorytmów, znajdziesz w artykule Tryb awaryjny telefonii.
Tryb awaryjny telefonii
Na urządzeniach z Androidem 13 lub nowszym usługa time_zone_detector
obsługuje tryb awaryjny telefonii. W tym trybie Android tymczasowo korzysta z sugestii wykrywania strefy czasowej przez telefon w sytuacjach, gdy wykrywanie lokalizacji nie jest w stanie wykryć strefy czasowej lub gdy wykrywanie lokalizacji trwa dłużej niż wykrywanie przez telefon.
Tryb awaryjny telefonii dotyczy urządzeń, na których obsługiwane są wykrywanie telefonii i lokalizacji, a użytkownik włączył opcję Użyj lokalizacji do ustawienia strefy czasowej w Ustawieniach strefy czasowej. Tryb ten jest włączany automatycznie po ponownym uruchomieniu urządzenia i wyłączeniu trybu samolotowego.
W Androidzie 14 i nowszych wersjach tryb awaryjny telefonii może zostać włączony za pomocą interfejsów API do raportowania stanu LTZP. Oznacza to, że jeśli LTZP zgłosi, że nie jest pewien, że jego zdolność do wykrywania lokalizacji lub strefy czasowej jest ograniczona przez środowisko, włącza tryb awaryjny telefonii.
W trybie awaryjnym usługi time_zone_detector
używają sugestii telefonicznych tak, jakby wykrywanie lokalizacji było wyłączone dopóki algorytm lokalizacji nie przedstawi określonej sugestii. Po otrzymaniu określonej sugestii tryb awaryjny telefonii jest wyłączany i sugestie dotyczące lokalizacji są używane wyłącznie.
Szczegółowe informacje o konfiguracji trybu awaryjnego telefonii znajdziesz w artykule Konfiguracja wykrywania strefy czasowej.
Ustawienia strefy czasowej
Użytkownicy mogą włączyć i skonfigurować ustawienia automatycznego wykrywania strefy czasowej w aplikacji ustawień AOSP.
Rysunek 2. Automatyczne wykrywanie strefy czasowej w Ustawieniach.
W tabeli poniżej opisujemy opcje użytkownika dotyczące wykrywania strefy czasowej w aplikacji Ustawienia AOSP.
*W Androidzie 11 i starszych to ustawienie ma etykietę Użyj strefy czasowej podanej przez sieć. |
|||
Lokalizacja ustawień AOSP | Nazwa ustawień AOSP | Zakres | Działanie |
---|---|---|---|
System > Data i godzina | Ustawianie strefy czasowej automatycznie* | Wszyscy użytkownicy | przełącznik; Gdy opcja jest włączona, urządzenie odpowiada za wykrywanie bieżącej strefy czasowej. Gdy ta opcja jest wyłączona, użytkownicy mogą ręcznie ustawić strefę czasową urządzenia. |
System > Data i godzina | Używanie lokalizacji do ustawiania strefy czasowej | Bieżący użytkownik | przełącznik; Dostępne od Androida 12. Ten przełącznik jest wyświetlany tylko wtedy, gdy wykrywanie strefy czasowej lokalizacji jest obsługiwane na urządzeniu. Informacje o zmianach wprowadzonych w Androidzie 14 znajdziesz w artykule Urządzenia obsługujące tylko wykrywanie strefy czasowej lokalizacji. |
Lokalizacja | Użyj lokalizacji | Bieżący użytkownik | przełącznik; Umożliwia lub uniemożliwia ogólne korzystanie z lokalizacji urządzenia. Wartość jest istotna, jeśli wykrywanie strefy czasowej lokalizacji jest obsługiwane na urządzeniu. |
Poniżej znajdziesz omówienie działania urządzenia w zakresie wykrywania strefy czasowej na podstawie ustawień wybranych przez użytkownika:
[Data i godzina] Ustaw strefę czasową automatycznie: WYŁ.
- Użytkownik musi ręcznie wybrać strefę czasową.
[Data i godzina] Ustaw strefę czasową automatycznie: WŁ.
[Lokalizacja] Używaj lokalizacji: WYŁ.
- Strefa czasowa jest wykrywana na podstawie sygnałów telefonii.
[Lokalizacja] Używaj lokalizacji: WŁ.
[Data i godzina] Używaj lokalizacji, aby ustawić strefę czasową: włączona
- Lokalizacja jest używana do wykrywania strefy czasowej.
[Data i godzina] Używaj lokalizacji, aby ustawić strefę czasową: WYŁ.
- Do wykrywania strefy czasowej służą sygnały telefoniczne.
Urządzenia wielu użytkowników
Ponieważ wiele z tych ustawień jest ograniczonych do bieżącego użytkownika, zachowanie wykrywania strefy czasowej urządzenia może się zmienić, gdy zmieni się bieżący użytkownik na urządzeniu z Androidem, na którym korzysta więcej osób.
Przełącznik Użyj lokalizacji do ustawienia strefy czasowej jest ograniczony do bieżącego użytkownika i nie jest ograniczony przez zasady urządzenia, co oznacza, że użytkownicy mogą zawsze zmienić jego wartość, nawet jeśli przełącznik Ustaw strefę czasową automatycznie jest wyłączony lub jeśli inne ustawienia czasu lub strefy czasowej są ograniczone przez kontroler zasad urządzenia.
Urządzenia, które obsługują tylko algorytm wykrywania strefy czasowej lokalizacji
W tej sekcji opisano działanie na urządzeniach, które obsługują tylko algorytm lokalizacji.
Android 14 lub nowszy
- Opcja Użyj lokalizacji nie jest widoczna dla użytkowników w aplikacji ustawień AOSP, a urządzenie zachowuje się tak, jakby opcja Użyj lokalizacji była włączona.
- Wartość ustawienia
SettingsProvider
na poziomie użytkownika jest ignorowana.location_time_zone_detection_enabled
Ta wartość rejestruje ustawienia użytkownika na innych typach urządzeń.
Android 12 lub Android 13
- Opcja Użyj lokalizacji jest widoczna dla użytkowników w aplikacji ustawień AOSP i użytkownicy mogą ją wyłączyć. Jeśli opcja jest wyłączona, urządzenie nie wykryje automatycznie strefy czasowej.
Zachowanie podczas przełączania się między automatycznym wykrywaniem
Gdy użytkownik przełączy wykrywanie strefy czasowej z ręcznego na automatyczne,
time_zone_detector
może już znać bieżącą strefę czasową. Jeśli tak, to gdy użytkownik włączy automatyczne wykrywanie, strefa czasowa urządzenia może zostać zmieniona w tym samym czasie, aby pasowała do opinii usługi time_zone_detector
.
Podobnie, gdy użytkownik wprowadzi zmianę w Ustawieniach, która powoduje zmianę bieżącego algorytmu usługi time_zone_detector
, time_zone_detector
może już otrzymać sugestie dotyczące nowego algorytmu, a czas na urządzeniu może zostać natychmiast zmieniony zgodnie z opinią usługi time_zone_detector
.
Wykrywanie strefy czasowej w telefonii
Wykrywanie strefy czasowej na podstawie telefonii wykorzystuje sygnały telefoniczne do określenia bieżącej strefy czasowej. Więcej informacji znajdziesz w artykule Wykrywanie strefy czasowej w telefonii.
Wykrywanie strefy czasowej lokalizacji
Wykrywanie strefy czasowej lokalizacji jest dostępne na Androidzie 12 lub nowszym. Jest to opcjonalna funkcja automatycznego wykrywania strefy czasowej, która umożliwia urządzeniom określanie bieżącej strefy czasowej na podstawie lokalizacji.
Usługa location_time_zone_manager
, wprowadzona w Androidzie 12, działa na serwerze systemowym i zawiera kod odpowiedzialny za przesyłanie sugestii algorytmu lokalizacji do usługi time_zone_detector
.
Więcej informacji znajdziesz w artykule Wykrywanie strefy czasowej na podstawie lokalizacji.
Ważne kwestie dotyczące wdrażania funkcji
W tej sekcji opisano aspekty funkcji wykrywania strefy czasowej lokalizacji, aby pomóc producentowi urządzenia w podejmowaniu decyzji o wprowadzeniu tej funkcji na urządzeniu.
Porównanie wykrywania rozmów telefonicznych i lokalizacji
W tabeli poniżej znajdziesz porównanie zalet i wad korzystania z lokalizacji zamiast sygnałów telefonicznych do wykrywania strefy czasowej.
Wykrywanie przez telefon | Wykrywanie lokalizacji | |
---|---|---|
Poprawność | To zależy od kraju. Zależy od MCC, poprawności i dostępności NITZ. |
Zależy od konfiguracji funkcji lub komponentów wtyczki. Dokładność zależy zwykle od:
|
Możliwość aktualizacji | Wykrywanie połączeń telefonicznych opiera się na plikach zawartych w możliwym do zaktualizowania module Time Zone Data (com.android.tzdata APEX). | Zależy od konfiguracji funkcji lub komponentów wtyczki. Możliwość aktualizacji zależy zwykle od tego, czy urządzenie korzysta z danych mapy stref czasowych po stronie serwera czy klienta. Uwaga: dane mapy stref czasowych nie są zawarte w module Time Zone Data używanym do aktualizowania kopii TZDB na Androidzie i innych informacji o strefach czasowych. Producenci urządzeń muszą też wziąć pod uwagę spójność wersji między regułami stref czasowych a danymi mapy stref czasowych. |
Zużycie energii | Brak lub niskie zużycie energii | Zależy od ustawień lokalizacji użytkownika, używanych wtyczek i zwykle tego, o jakie informacje o lokalizacji proszą inne aplikacje. |
Dostępność | tylko urządzenia telefoniczne. Zwykle wymaga to działającej karty SIM. | Wykrywanie lokalizacji zależy od dostępnych dostawców lokalizacji. |
Prywatność użytkowników
Preferowana strefa czasowa użytkownika jest zwykle określana na podstawie jego lokalizacji geograficznej. Lokalizacja jest danymi wrażliwymi. Użytkownicy mogą się obawiać, że ich lokalizacja zostanie udostępniona w ramach wykrywania strefy czasowej. Niezależnie od wykrywania strefy czasowej wszystkie aplikacje działające na urządzeniu mogą odczytać jego aktualną strefę czasową bez konieczności uzyskania uprawnień na Androidzie. Na podstawie tych informacji aplikacje mogą uzyskać przybliżoną lokalizację urządzenia.
W szczególności wykrywanie strefy czasowej może działać w sposób pasywny lub aktywny:
- Pasywna: coś w otoczeniu urządzenia informuje urządzenie, z której strefy czasowej ma korzystać w danym środowisku.
- Aktywna: urządzenie musi określić strefę czasową i w zależności od ustawień prywatności użytkowników oraz ich zgody uzyskać lokalizację urządzenia. Następnie może udostępnić swoją lokalizację zewnętrznym usługom. Szczegółowe informacje o prywatności użytkowników i wyrażaniu przez nich zgody znajdziesz poniżej.
Wykrywanie pasywne, takie jak algorytm telefoniczny, nie ma dodatkowych konsekwencji dla prywatności użytkowników.
Aktywna detekcja, np. algorytm lokalizacji, polega na określeniu lokalizacji urządzenia, na co użytkownicy mogą nie chcieć się zgodzić. Lokalizacja może zostać wysłana przez sieć, aby określić identyfikator strefy czasowej.
Podejście Androida do prywatności użytkownika w zakresie wykrywania strefy czasowej daje użytkownikowi możliwość indywidualnego wyłączania algorytmów, które powinny być aktywne. Dodatkowo kod platformy AOSP nie zajmuje się bezpośrednio lokalizacją: wykrywanie lokalizacji i mapowanie lokalizacji na identyfikatory stref czasowych są pozostawione komponentom wtyczki skonfigurowanym przez producentów urządzeń.
Więcej informacji o funkcjach ochrony prywatności użytkowników znajdziesz w artykule Wykrywanie strefy czasowej.
Konfiguracja
Producenci urządzeń mogą skonfigurować usługę time_zone_detector
, aby zmienić jej działanie. W tej sekcji opisano opcje konfiguracji dotyczące ogólnego zachowania usługi time_zone_detector
. Szczegółowe informacje o konfiguracji algorytmów wykrywania strefy czasowej i telefonii znajdziesz w artykułach Wykrywanie strefy czasowej przez telefony i Wykrywanie strefy czasowej przez lokalizację.
Podstawowa konfiguracja AOSP znajduje się pod adresem frameworks/base/core/res/res/values/config.xml
.
Klucz konfiguracji | Wartość AOSP | Opis |
---|---|---|
config_supportTelephonyTimeZoneFallback |
true |
Gdy true , time_zone_detector używa trybu awaryjnego telefonicznego. Ta funkcja jest dostępna na urządzeniach z Androidem 13 lub nowszym.
|
Zmiana domyślnego zachowania urządzenia
W AOSP automatyczne wykrywanie strefy czasowej jest domyślnie włączone, a ustawienie auto_time_zone
ma wartość true
. Aby domyślnie wyłączyć automatyczne wykrywanie czasu, ustaw wartość parametru def_auto_time_zone
zdefiniowanego w parametry frameworks/base/packages/SettingsProvider/res/values/defaults.xml
na false
.
Podczas przywracania kopii zapasowej z innego urządzenia framework domyślnie aktualizuje wartość ustawienia auto_time_zone
. Jeśli chcesz mieć pewność, że to ustawienie nie zostanie przywrócone z kopii zapasowej, dodaj element auto_time_zone
do tablicy restore_blocked_global_settings
zdefiniowanej w definicji frameworks/base/packages/SettingsProvider/res/values/blocked_settings.xml
.
Debugowanie i testowanie strefy czasowej
W tej sekcji znajdziesz informacje o tym, jak debugować i testować zachowanie usługi time_zone_detector
i innych komponentów, które są wspólne dla wszystkich algorytmów.
Konfigurowanie urządzenia za pomocą usługi device_config
Usługa device_config
to mechanizm używany na Androidzie do konfigurowania zmiennego zachowania za pomocą wartości, które są zwykle pobierane z serwera zdalnego przez kod zastrzeżony (niebędący częścią AOSP). Gdy do testowania używasz wartości device_config
,
szczególnie podczas długich testów ręcznych, urządzenie może zsynchronizować flagi, co spowoduje ich zresetowanie i wyczyszczenie wartości ustawionych na potrzeby testowania.
Aby tymczasowo zablokować synchronizację flagi, na Androidzie 12 lub nowszym użyj:
adb shell cmd device_config set_sync_disabled_for_tests persistent
Aby przywrócić synchronizację flag po zakończeniu testów, użyj:
adb shell cmd device_config set_sync_disabled_for_tests none
Po przywróceniu synchronizacji flag uruchom ponownie urządzenie.
Więcej informacji znajdziesz w artykule $ adb shell cmd device_config help
.
Interakcja z usługą time_zone_detector
Aby wyświetlić konfigurację i stan usługi time_zone_detector
, użyj:time_zone_detector
adb shell cmd time_zone_detector dump
Aby zobaczyć dodatkowe polecenia do debugowania i testowania wykrywania strefy czasowej, użyj:
adb shell cmd time_zone_detector help
Dane wyjściowe pomocy opisują 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. Szczegółowe informacje znajdziesz w artykule Konfigurowanie urządzenia za pomocą usługi device_config.
Aby sprawdzić wykrywanie strefy czasowej, testerzy muszą wiedzieć, którego algorytmu używa time_zone_detector
. Aby poznać obecny algorytm time_zone_detector
i wpłynąć na niego, użyj jednej z tych opcji:
- Sprawdź wizualnie interfejs ustawień. Więcej informacji znajdziesz w ustawieniach strefy czasowej.
Użyj wiersza poleceń za pomocą adb:
- Aby zrzucić stan
time_zone_detector
, użyj poleceniaadb shell cmd time_zone_detector dump
- Aby zmienić ustawienie urządzenia, użyj innych poleceń
time_zone_detector
. Więcej informacji znajdziesz w artykuleadb shell cmd time_zone_detector help
.
- Aby zrzucić stan
Poniżej znajdziesz przykład danych wyjściowych polecenia adb shell cmd
time_zone_detector dump
, w których informacje o bieżącym stanie algorytmu i usługi są wyróżnione pogrubioną czcionką:
$ adb shell cmd time_zone_detector dump
TimeZoneDetectorStrategy:
mEnvironment.getCurrentUserId()=0
mEnvironment.getConfiguration(currentUserId)=ConfigurationInternal{mUserId=0, mUserConfigAllowed=true, mTelephonyDetectionSupported=true, mGeoDetectionSupported=true, mAutoDetectionEnabled=true, mLocationEnabled=true, mGeoDetectionEnabled=true}
[Capabilities=TimeZoneCapabilitiesAndConfig{mCapabilities=TimeZoneDetectorCapabilities{mUserHandle=UserHandle{0}, mConfigureAutoDetectionEnabledCapability=40, mConfigureGeoDetectionEnabledCapability=40, mSuggestManualTimeZoneCapability=30}, mConfiguration=TimeZoneConfiguration{mBundle=Bundle[{geoDetectionEnabled=true, autoDetectionEnabled=true}]}}]
mEnvironment.isDeviceTimeZoneInitialized()=true
mEnvironment.getDeviceTimeZone()=Europe/London
Time zone change log:
Manual suggestion history:
...
Geolocation suggestion history:
...
Telephony suggestion history:
...
Informacje te można interpretować w ten sposób:
Klucz | Wartość |
---|---|
mUserConfigAllowed |
Określa, czy użytkownik nie może kontrolować ustawień daty i godziny za pomocą sterownika zasad urządzenia. |
mTelephonyDetectionSupported |
Określa, czy urządzenie ma wykrywanie strefy czasowej w telefonie. |
mGeoDetectionSupported |
Określa, czy urządzenie obsługuje wykrywanie strefy czasowej lokalizacji. Jest to skuteczny stan oparty na konfiguracji oraz obecności co najmniej jednego LTZP. |
mAutoDetectionEnabled |
Określa, czy automatyczne wykrywanie strefy czasowej jest włączone. |
mLocationEnabled |
Przełącznik głównej lokalizacji. |
mGeoDetectionEnabled |
Przełącznik algorytmu: false wskazuje algorytm telefonii, a true – algorytm lokalizacji. |
Informacje o historii sugestii wskazują, które sugestie zostały wprowadzone przez użytkownika (ręcznie) oraz przez algorytmy telefoniczne i lokalizacyjne.