Przegląd czasu

Na tej stronie opisujemy, jak działa wykrywanie czasu i strefy czasowej na urządzeniach z Androidem. Obejmuje to sposób, w jaki Android automatycznie wykrywa czas i strefy czasowe, 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 epoki uniksowej
  • bieżącą strefę czasową,

Bieżący czas epoki systemu Unix i bieżąca strefa czasowa to stany obejmujące całe urządzenie, co oznacza, że są one współdzielone przez wszystkich użytkowników urządzenia.

Bieżący czas epoki systemu Unix nie jest stałą wartością. Jest on automatycznie aktualizowany, aby odzwierciedlać upływ czasu. Oprócz upływu czasu bieżący czas epoki systemu Unix na urządzeniu jest korygowany, jeśli okaże się nieprawidłowy, np. po utracie zasilania.

Bieżąca strefa czasowa określa korektę, która ma zostać zastosowana w celu przekonwertowania bieżącego czasu uniksowego na czas lokalny. Na przykład latem w Los Angeles urządzenie odejmuje 7 godzin od bieżącego czasu epoki systemu Unix, a zimą – 8 godzin.

Aby obsługiwać obliczanie czasu lokalnego, wszystkie urządzenia z Androidem mają bazę danych ze wszystkimi regułami stref czasowych na świecie. Więcej informacji o regułach stref czasowych znajdziesz w artykule Reguły stref czasowych.

Gdy użytkownik podróżuje do nowej lokalizacji, w której obowiązuje inna strefa czasowa, bieżący czas epoki systemu Unix nie musi być dostosowywany, ale użytkownik zwykle chce widzieć czas lokalny, a nie czas w poprzedniej lokalizacji. Zmiana bieżącej strefy czasowej zapewnia zastosowanie prawidłowego przesunięcia do bieżącego czasu uniksowego, aby wyświetlić prawidłowy czas lokalny dla nowej lokalizacji.

AOSP umożliwia użytkownikom niezależne kontrolowanie, czy czas i strefa czasowa są ustawiane automatycznie, za pomocą tych mechanizmów:

  • Automatyczne wykrywanie czasu: zapewnia, że urządzenie ma prawidłowy bieżący czas epoki Unix.
  • Automatyczne wykrywanie strefy czasowej: zapewnia, że urządzenie ma prawidłową bieżącą strefę czasową.

Automatyczne wykrywanie czasu

W tej sekcji znajdziesz omówienie usługi time_detector, która zarządza automatycznym wykrywaniem czasu, ustawieniami użytkownika, opcjami konfiguracji i szczegółami testowania.

Usługa time_detector

Usługa time_detector, która jest dostępna na urządzeniach z Androidem 10 lub nowszym, zarządza automatycznym wykrywaniem czasu. Gdy włączone jest automatyczne wykrywanie czasu, dostosowuje bieżący czas epoki systemu Unix na urządzeniu.

Usługa time_detector jest zawsze w jednym z 2 stanów: certain lub uncertain. Stan usługi (pewny lub niepewny) jest określany na podstawie sugestii dotyczących czasu, które pochodzą z różnych źródeł.

Gdy time_detector usługa jest pewna, tzn. otrzymała sugestię z informacjami o czasie epoki systemu Unix, zastępuje bieżący czas epoki systemu Unix, jeśli sugerowany czas różni się od bieżącego czasu epoki systemu Unix.

Gdy time_detector jest niepewne, nie zastępuje bieżącego czasu. Stan niepewny zwykle oznacza, że usługa time_detector nie otrzymała sugestii dotyczących czasu. Usługa time_detector staje się też niepewna, jeśli otrzymane sugestie są zbyt stare, aby można było ich użyć. Wiek sugestii jest brany pod uwagę, ponieważ korekty z użyciem starych sugestii czasu uniksowego zależą od czasu, który upłynął od ostatniego uruchomienia zegara czasu rzeczywistego na urządzeniu. Zakłada się, że po dłuższym czasie jest on niedokładny.

Aby automatycznie ustalić bieżący czas uniksowy, urządzenie może korzystać z różnych źródeł. W tym dokumencie są one nazywane źródłami. Usługa traktuje sekwencje sugestii jako odrębne na podstawie ich pochodzenia.time_detector

Usługa time_detector jest stanowa, co oznacza, że przechowuje rekordy z najnowszymi sugestiami pochodzącymi z każdego źródła. Nowe sugestie są wysyłane do time_detector, jeśli źródło ma nowsze informacje o czasie epoki systemu Unix. 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, istnieje wiele powodów, dla których ustalenie bieżącego czasu epoki systemu Unix nie zawsze jest proste w przypadku urządzenia z Androidem:

  • Czas epoki systemu Unix to nieco inny system pomiaru czasu niż czas UTC. Konwersja między nimi wymaga wiedzy o tym, kiedy występują sekundy przestępne i jak są obsługiwane przez źródła.
  • Pochodzenie może być dostępne tylko w określonych porach lub w określonych okolicznościach. Jeśli na przykład źródło wymaga połączenia z siecią, może być dostępne tylko wtedy, gdy urządzenie jest połączone z internetem.
  • Pochodzenie może być niedokładne lub nieprecyzyjne albo zawierać błędy. Jeśli na przykład wieża telefonii komórkowej nie śledzi prawidłowo czasu UTC, źródło telefonii może podawać niedokładne sugestie dotyczące czasu.
  • Podczas uzyskiwania czasu epoki uniksowej mogą wystąpić nieścisłości. Na przykład opóźnienie sieci, buforowanie lub planowanie procesów mogą spowodować, że czas epoki uniksowej będzie niedokładny.
  • Zegar referencyjny używany do dostosowywania sugestii dotyczącej czasu, który upłynął od jej otrzymania, może być niedokładny.

W AOSP domyślnie skonfigurowane są 2 główne źródła wykrywania czasu:

  • Sieć: korzysta z serwerów czasu NTP (Network Time Protocol).
  • Telefonia: korzysta z sygnałów telefonicznych NITZ (Network Identity and Time Zone).

Zarówno połączenia telefoniczne, jak i sieciowe wymagają połączenia z sieciami zewnętrznymi, które nie zawsze są dostępne.

Od Androida 12 obsługiwane są też te pochodzenia, które nie są domyślnie skonfigurowane do użycia:

  • GNSS: korzysta z dostawcy lokalizacji GPS, aby uzyskać czas ze źródła GNSS.
  • Zewnętrzne: ogólne źródło, które umożliwia producentom urządzeń integrowanie własnego źródła czasu uniksowego.

Ustawienia czasu

Użytkownicy mogą włączyć automatyczne wykrywanie czasu w sekcji System > Data i godzina w aplikacji Ustawienia AOSP.

Automatyczne wykrywanie czasu w Ustawieniach

Rysunek 1. Automatyczne wykrywanie czasu w Ustawieniach.

W tabeli poniżej opisujemy ustawienia czasu w aplikacji Ustawienia AOSP.

*Na Androidzie 11 i starszych wersjach to ustawienie nosi nazwę Używaj czasu dostarczanego przez sieć.

Lokalizacja ustawień AOSP Nazwa ustawień AOSP Zakres Działanie
System > Data i godzina Ustawiaj godzinę automatycznie* Wszyscy użytkownicy

Przełącznik.

Gdy ta opcja jest włączona, urządzenie odpowiada za wykrywanie bieżącego czasu epoki Unix. Gdy ta opcja jest wyłączona, użytkownicy mają dostęp do ustawień, które umożliwiają ręczne ustawienie czasu na urządzeniu.

Gdy użytkownik wpisuje czas ręcznie, podaje czas lokalny, a nie czas epoki systemu Unix. Obecny czas epoki uniksowej jest obliczany na podstawie bieżącej strefy czasowej.

Konfiguracja

Producenci urządzeń mogą konfigurować usługę time_detector na różne sposoby, np. określać, z których źródeł korzystać i jak ustalać priorytety sygnałów z nich pochodzących.

Ustalanie priorytetu źródeł

Od Androida 12 producenci urządzeń mogą zmieniać plik konfiguracyjny core/res/res/values/config.xml, aby określać, które źródła czasu mają być uwzględniane w automatycznym wykrywaniu czasu, oraz priorytet, z jakim core/res/res/values/config.xml bierze pod uwagę te źródła.time_detector

W przypadku urządzeń z Androidem 11 lub starszym priorytet źródła jest na stałe ustawiony na ["telephony", "network"], co oznacza, że sugestie dotyczące telefonii mają wyższy priorytet niż sugestie dotyczące sieci.

Domyślna konfiguracja AOSP jest następująca:

<!-- 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 telefonii są domyślnie konfigurowane jako źródła. Propozycje czasu sieciowego mają wyższy priorytet niż propozycje czasu połączeń telefonicznych. Producenci urządzeń mogą zmienić kolejność źródeł, aby przywrócić działanie z Androida 11 lub starszego, w którym telefonia ma wyższy priorytet.

Domyślnie, jeśli sugestia o najwyższym priorytecie pasuje do bieżącego czasu zegara systemowego urządzenia z dokładnością do kilku sekund, czas urządzenia nie zostanie zmieniony. Dzięki temu unikniesz tworzenia zadań dla zainstalowanych aplikacji, które nasłuchują intencji ACTION_TIME_CHANGED.

Dozwolone wartości pochodzenia to:

Dozwolone przedziały czasu

Android 14 wprowadza górną granicę czasu dla sugestii czasu otrzymywanych 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 spowodować problem z rokiem 2038.

W Androidzie 12 wprowadzono dolną granicę czasu, która jest używana do weryfikowania sugestii dotyczących czasu otrzymywanych przez usługę time_detector. Dolna granica czasu używana w przypadku 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ż data utworzenia obrazu systemu urządzenia. Jeśli sugerowany czas jest wcześniejszy niż dolna granica czasu, usługa odrzuca sugestię, ponieważ nie może być ona prawidłowa, jeśli sygnatura czasowa kompilacji jest prawidłowa.time_detector

W przypadku urządzeń z Androidem 11 lub starszym usługa time_detector nie weryfikuje przychodzących sugestii dotyczących czasu epoki systemu Unix.

Debugowanie i testowanie czasu

Z tej sekcji dowiesz się, jak debugować i testować działanie usługi time_detector oraz innych komponentów, które są wspólne dla wszystkich źródeł.

Interakcja z usługą time_detector

Aby wyświetlić konfigurację i stan usługi time_detector, użyj tego polecenia:time_detector

adb shell cmd time_detector dump

Aby wyświetlić dodatkowe polecenia do debugowania i testowania wykrywania strefy czasowej, użyj tego polecenia:

adb shell cmd time_detector 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_detector na potrzeby testowania lub w środowisku produkcyjnym. Więcej informacji znajdziesz w artykule Konfigurowanie urządzenia za pomocą usługi device_config.

Aby sprawdzić automatyczne wykrywanie czasu, testerzy muszą wiedzieć, z jakich źródeł korzysta usługa time_detector. Poniżej znajdziesz przykład danych wyjściowych polecenia adb shell cmd time_detector dump z informacjami o bieżącym pochodzeniu i stanie usługi wyróżnionymi 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() Obecna dolna granica używana do weryfikowania sugestii dotyczących czasu.
mEnvironment.autoOriginPriorities() Używane źródła i 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 zaproponowane przez poszczególne ź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, ustawieniami użytkownika, wykrywaniem strefy czasowej na podstawie telefonii i lokalizacji oraz szczegółami testowania.

Usługa time_zone_detector

Usługa time_zone_detector, która jest dostępna na urządzeniach z Androidem 11 lub nowszym, zarządza automatycznym wykrywaniem strefy czasowej. W razie potrzeby dostosowuje bieżącą strefę czasową urządzenia, gdy włączone jest automatyczne wykrywanie strefy czasowej.

Gdy automatyczne wykrywanie strefy czasowej jest włączone, ikona time_zone_detector może mieć jeden z 2 stanów: certainuncertain.

Gdy usługa time_zone_detector jest w określonym stanie, oznacza to, że usługa time_zone_detector otrzymała dokładne informacje o strefie czasowej, które mogą spowodować zastąpienie bieżącej strefy czasowej. Gdy jest niepewna, oznacza to, że nie otrzymała żadnych informacji lub tylko informacje o niskim poziomie ufności, co oznacza, że nie zastąpi bieżącej strefy czasowej.

Niektóre stany usługi time_zone_detector mogą obejmować takie, w których time_zone_detector nie ma informacji o strefie czasowej lub ma do wyboru kilka stref czasowych. Są to:

  • Gdy urządzenie znajduje się w miejscu bez strefy czasowej, np. na wodach międzynarodowych lub na obszarze spornym, przechodzi w stan z zerową liczbą stref czasowych. Ten stan jest podobny do stanu niepewnego, ale oznacza, że time_zone_detector nie musi podejmować dalszych działań, aby określić strefę czasową.
  • Wpisano stan z kilkoma strefami czasowymi, w którym występuje niejednoznaczność lub warunki graniczne. W tym stanie, jeśli bieżąca strefa czasowa jest jedną ze stref, co do których time_zone_detector ma pewność, pozostaje ona bez zmian. W przeciwnym razie używana jest jedna z dostępnych stref czasowych. Dzięki temu time_zone_detector jest bardziej atrakcyjny, jeśli użytkownik wcześniej ręcznie wybrał strefę czasową lub gdy urządzenie zbliża się do granicy.

Stan usługi time_zone_detector (pewny lub niepewny) jest określany na podstawie sugestii dotyczących stref czasowych wysyłanych przez algorytm.

Sugestie dzielą się na 2 rodzaje, które ściśle odpowiadają możliwym stanom time_zone_detector: certainuncertain. 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 Europa/Londyn.
  • 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 2 stref, ale nie może wybrać między America/Denver a America/Phoenix.

Usługa time_zone_detector traktuje sekwencje sugestii jako odrębne na podstawie swojego algorytmu. W zależności od algorytmu sugestie mogą też zawierać metadane, które wskazują, jak bardzo algorytm jest pewny.

Usługa time_zone_detector jest stanowa, co oznacza, że przechowuje rekord najnowszej sugestii każdego algorytmu. Nowe sugestie są wysyłane do usługi time_zone_detector, jeśli poprzednia sugestia jest już nieprawidłowa, czyli jeśli algorytm ma teraz inną sugestię lub utracił możliwość wykrywania 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 używa jednego algorytmu do określania strefy czasowej. Gdy 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 używany do określania strefy czasowej staje się niepewny, time_zone_detector zwykle nie korzysta z sugestii innego algorytmu. Sugestie powiązane z algorytmami, które nie są używane, mogą być przechowywane w pamięci przez time_zone_detector, ale nie są używane, dopóki algorytm się nie zmieni. Gdy użytkownik zmieni ustawienia automatycznego wykrywania strefy czasowej i algorytm ulegnie zmianie, zostanie użyta najnowsza sugestia dostępna dla nowego algorytmu.

Szczegółowe informacje o sytuacji, w której do określenia strefy czasowej używa się kilku algorytmów, znajdziesz w sekcji Tryb awaryjny telefonii.

Tryb awaryjny połączeń telefonicznych

Na urządzeniach z Androidem 13 lub nowszym usługa time_zone_detector obsługuje tryb awaryjny połączeń telefonicznych. Ten tryb umożliwia Androidowi tymczasowe korzystanie z sugestii wykrywania połączeń telefonicznych w sytuacjach, gdy wykrywanie lokalizacji nie może wykryć strefy czasowej lub gdy wykrywanie lokalizacji trwa dłużej niż wykrywanie połączeń telefonicznych.

Tryb awaryjny telefonii dotyczy urządzeń, które obsługują zarówno telefonię, jak i wykrywanie lokalizacji, a użytkownik włączył opcję Użyj lokalizacji do ustawienia strefy czasowejustawieniach strefy czasowej. Tryb ten jest włączany automatycznie po ponownym uruchomieniu urządzenia i wyłączeniu trybu samolotowego.

W Androidzie 14 i nowszych wersjach przełączanie na sieć komórkową może być wywoływane przez interfejsy API stanu LTZP. Jeśli LTZP zgłosi, że nie ma pewności i jego zdolność do wykrywania lokalizacji lub strefy czasowej jest ograniczona przez środowisko, zostanie wywołany tryb przełączania na sieć komórkową.

W trybie awaryjnym telefonii usługa time_zone_detector korzysta z sugestii telefonicznych tak, jakby wykrywanie lokalizacji było wyłączone do momentu, gdy algorytm lokalizacji poda określoną sugestię. Po otrzymaniu określonej sugestii tryb awaryjny telefonii jest wyłączany i używane są wyłącznie sugestie dotyczące lokalizacji.

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

Automatyczne wykrywanie strefy czasowej w Ustawieniach

Rysunek 2. Automatyczne wykrywanie strefy czasowej w Ustawieniach.

W tabeli poniżej opisujemy ustawienia użytkownika dotyczące wykrywania strefy czasowej w aplikacji Ustawienia AOSP.

*Na Androidzie 11 i starszych to ustawienie ma nazwę Użyj strefy czasowej podanej przez sieć.

Lokalizacja ustawień AOSP Nazwa ustawień AOSP Zakres Działanie
System > Data i godzina Ustawiaj strefę czasową automatycznie* Wszyscy użytkownicy

Przełącznik.

Gdy ta opcja jest włączona, urządzenie wykrywa bieżącą strefę czasową. Gdy ta opcja jest wyłączona, użytkownicy mają możliwość ręcznego ustawienia strefy czasowej urządzenia.

System > Data i godzina Używaj lokalizacji do ustawiania strefy czasowej Bieżący użytkownik

Przełącznik.

Dostępne na Androidzie 12. Ten przełącznik jest wyświetlany tylko wtedy, gdy urządzenie obsługuje wykrywanie strefy czasowej lokalizacji.

Informacje o zmianach wprowadzonych w Androidzie 14 znajdziesz w sekcji Urządzenia, które obsługują tylko wykrywanie strefy czasowej lokalizacji.

Lokalizacja Użyj lokalizacji Bieżący użytkownik

Przełącznik.

Zezwala na korzystanie z lokalizacji urządzenia lub blokuje taką możliwość. Wartość jest istotna, jeśli urządzenie obsługuje wykrywanie strefy czasowej lokalizacji.

Poniżej znajdziesz omówienie działania urządzenia w przypadku wykrywania strefy czasowej w zależności od 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Ł.

      • Do wykrywania strefy czasowej używane są sygnały telefoniczne.
    • [Lokalizacja] Używaj lokalizacji: WŁĄCZONA

      • [Data i godzina] Używaj lokalizacji, aby ustawić strefę czasową: WŁ.

        • Lokalizacja jest używana do wykrywania strefy czasowej.
      • [Data i godzina] Używaj lokalizacji, aby ustawić strefę czasową: WYŁ.

        • Do wykrywania strefy czasowej używane są sygnały telefoniczne.

Wiele urządzeń użytkownika

Ponieważ niektóre z tych ustawień są ograniczone do bieżącego użytkownika, zachowanie urządzenia związane z wykrywaniem strefy czasowej może się zmienić, gdy na urządzeniu z Androidem, z którego korzysta wielu użytkowników, zmieni się bieżący użytkownik.

Przełącznik Użyj lokalizacji do ustawienia strefy czasowej jest ograniczony do bieżącego użytkownika i nie podlega zasadom dotyczącym urządzenia. Oznacza to, że użytkownicy mogą zawsze zmienić jego wartość, nawet jeśli przełącznik Automatycznie ustaw strefę czasową jest wyłączony lub jeśli inne ustawienia czasu lub strefy czasowej są ograniczone przez kontroler zasad dotyczących urządzenia.

Urządzenia, które obsługują tylko algorytm wykrywania strefy czasowej lokalizacji

W tej sekcji opisujemy działanie w przypadku urządzeń, które obsługują tylko algorytm lokalizacji.

  • Android 14 lub nowszy

    • Opcja Używaj lokalizacji nie jest wyświetlana użytkownikom w aplikacji Ustawienia AOSP, a urządzenie działa tak, jakby opcja Używaj lokalizacji była włączona.
    • Wartość ustawienia SettingsProviderlocation_time_zone_detection_enabled o zakresie użytkownika jest ignorowana. Ta wartość rejestruje preferencje użytkownika na innych typach urządzeń.
  • Androida 12 lub Androida 13,

    • Opcja Używaj lokalizacji jest widoczna dla użytkowników w aplikacji Ustawienia AOSP i mogą oni ją wyłączyć. Jeśli ta opcja jest wyłączona, urządzenie nie będzie automatycznie wykrywać strefy czasowej.

Zachowanie podczas przełączania na automatyczne wykrywanie i z niego

Gdy użytkownik przełączy wykrywanie strefy czasowej z ręcznego na automatyczne, time_zone_detector może już mieć pewność, jaka jest obecna strefa czasowa. Jeśli tak jest, gdy użytkownik włączy automatyczne wykrywanie, strefa czasowa urządzenia może zostać jednocześnie zmieniona, aby pasowała do opinii usługi time_zone_detector.

Podobnie, gdy użytkownik wprowadzi w Ustawieniach zmianę, która spowoduje zmianę bieżącego algorytmu usługi time_zone_detector, usługa time_zone_detector może już mieć sugestie dotyczące nowego algorytmu, więc czas na urządzeniu może zostać natychmiast zmieniony, aby odpowiadał opinii usługi time_zone_detector.

Wykrywanie strefy czasowej na podstawie telefonii

Wykrywanie strefy czasowej za pomocą telefonii wykorzystuje sygnały telefoniczne do określania bieżącej strefy czasowej. Więcej informacji znajdziesz w artykule Wykrywanie strefy czasowej na podstawie telefonii.

Wykrywanie strefy czasowej lokalizacji

Wykrywanie strefy czasowej lokalizacji jest dostępne na urządzeniach z Androidem 12 lub nowszym. Jest to opcjonalna funkcja automatycznego wykrywania strefy czasowej, która umożliwia urządzeniom używanie lokalizacji do określania bieżącej strefy czasowej.

Usługa location_time_zone_manager, wprowadzona w Androidzie 12, działa na serwerze systemowym i zawiera kod odpowiedzialny za przesyłanie sugestii algorytmów lokalizacji do usługi time_zone_detector. Więcej informacji znajdziesz w artykule Wykrywanie strefy czasowej na podstawie lokalizacji.

Uwagi dotyczące wdrażania funkcji

W tej sekcji opisujemy aspekty funkcji wykrywania strefy czasowej lokalizacji, aby pomóc producentowi urządzenia w podjęciu decyzji, czy wdrożyć tę funkcję na urządzeniu.

Porównanie telefonii i wykrywania lokalizacji

W tabeli poniżej znajdziesz porównanie zalet i wad korzystania z sygnałów lokalizacji zamiast sygnałów telefonicznych do wykrywania strefy czasowej.

Kategoria Wykrywanie połączeń telefonicznych Wykrywanie lokalizacji
Poprawność To zależy od kraju.

Zależy od kodu MCC, poprawności i dostępności NITZ.
Zależy od konfiguracji funkcji lub komponentów wtyczki.

Prawidłowość zwykle zależy od:
  • Dokładność i regularność działania dostawcy lokalizacji.
  • Jakość danych mapy stref czasowych.
Możliwość aktualizacji Wykrywanie telefonii opiera się na plikach zawartych w module Dane strefy czasowej (com.android.tzdata APEX), który można aktualizować. 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 serwera czy klienta.

Dane mapy stref czasowych nie są zawarte w module danych stref czasowych używanym do aktualizowania kopii TZDB w Androidzie i innych informacji o strefach czasowych.

Producenci urządzeń muszą też zadbać o 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 od tego, które inne aplikacje proszą o lokalizację.
Dostępność Tylko urządzenia telefoniczne. Zwykle wymaga 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 to dane wrażliwe. Użytkownicy mogą się obawiać, że w ramach wykrywania strefy czasowej udostępniana jest informacja o ich lokalizacji. Niezależnie od wykrywania strefy czasowej wszystkie aplikacje działające na urządzeniu mogą odczytywać jego bieżącą strefę czasową bez konieczności uzyskania uprawnień Androida. Na podstawie tych informacji aplikacje mogą wywnioskować przybliżoną lokalizację urządzenia.

Wykrywanie strefy czasowej może odbywać się pasywnie lub aktywnie:

  • Pasywne: coś w otoczeniu urządzenia informuje je o strefie czasowej, której ma używać w tym otoczeniu.
  • Aktywny: urządzenie musi samodzielnie określić strefę czasową. W zależności od ustawień prywatności użytkowników i ich zgody uzyskuje w tym celu lokalizację urządzenia. Następnie może udostępniać swoją lokalizację usługom zewnętrznym. Szczegółowe informacje o prywatności użytkowników i ich zgodzie znajdziesz w dalszej części tego artykułu.

Wykrywanie pasywne, np. za pomocą algorytmu telefonicznego, nie ma dodatkowych konsekwencji dla prywatności użytkowników.

Aktywne wykrywanie, np. za pomocą algorytmu lokalizacji, polega na określeniu lokalizacji urządzenia, na co użytkownicy mogą nie wyrazić zgody. Lokalizacja może być przesyłana przez sieć w celu określenia identyfikatora strefy czasowej.

Podejście Androida do ochrony prywatności użytkowników w przypadku 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 pozostawiono komponentom wtyczek konfigurowanym przez producentów urządzeń.

Więcej informacji o funkcjach ochrony prywatności użytkowników znajdziesz w artykule Wykrywanie strefy czasowej lokalizacji.

Konfiguracja

Producenci urządzeń mogą skonfigurować usługę time_zone_detector, aby zmienić jej działanie. W tej sekcji opisujemy opcje konfiguracji ogólnego działania usługi time_zone_detector. Szczegółowe informacje o konfiguracji algorytmów wykrywania strefy czasowej na podstawie telefonii i lokalizacji znajdziesz w artykułach Wykrywanie strefy czasowej na podstawie telefoniiWykrywanie strefy czasowej lokalizacji.

Podstawowa konfiguracja AOSP znajduje się w tym miejscu: 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 telefonii. Ta funkcja jest dostępna na urządzeniach z Androidem 13 lub nowszym.

 Zmiana domyślnego działania 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ść def_auto_time_zone zdefiniowaną w frameworks/base/packages/SettingsProvider/res/values/defaults.xml na false.

Podczas przywracania kopii zapasowej z innego urządzenia platforma domyślnie aktualizuje wartość ustawienia auto_time_zone. Jeśli chcesz mieć pewność, że to ustawienie nie zostanie przywrócone z kopii zapasowej, dodaj auto_time_zone do tablicy restore_blocked_global_settings zdefiniowanej w frameworks/base/packages/SettingsProvider/res/values/blocked_settings.xml.

Debugowanie i testowanie strefy czasowej

W tej sekcji znajdziesz informacje o debugowaniu i testowaniu działania usługi time_zone_detector oraz innych komponentów, które są wspólne dla wszystkich algorytmów.

Konfigurowanie urządzenia za pomocą usługi device_config

device_config to mechanizm używany na Androidzie do konfigurowania modyfikowalnego działania za pomocą wartości, które są zwykle pobierane z serwera zdalnego przez kod zastrzeżony (niepochodzący z AOSP). Podczas testowania z użyciem wartości device_config, zwłaszcza w przypadku długotrwałych testów ręcznych, urządzenie może zsynchronizować flagi, co spowoduje ich zresetowanie i wyczyszczenie wartości ustawionych na potrzeby testowania.

Aby tymczasowo zapobiec synchronizacji flag w Androidzie 12 lub nowszym, użyj tego polecenia:

adb shell cmd device_config set_sync_disabled_for_tests persistent

Aby przywrócić synchronizację flag po testach, użyj tego polecenia:

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 $ 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 tego polecenia:time_zone_detector

adb shell cmd time_zone_detector dump

Aby wyświetlić dodatkowe polecenia do debugowania i testowania wykrywania strefy czasowej, użyj tego polecenia:

adb shell cmd time_zone_detector help

W danych wyjściowych pomocy opisano też device_configwłaściwości usługi, których można używać do wpływania na działanie time_zone_detectorusługi na potrzeby testowania lub w środowisku produkcyjnym. Szczegółowe informacje znajdziesz w artykule Konfigurowanie urządzenia za pomocą usługi device_config.

Aby zweryfikować wykrywanie strefy czasowej, testerzy muszą wiedzieć, którego algorytmu używa urządzenietime_zone_detector. Aby poznać i wpłynąć na działanie obecnego algorytmu time_zone_detector, skorzystaj z jednej z tych opcji:

  • Sprawdź wizualnie w interfejsie Ustawień. Więcej informacji znajdziesz w artykule Ustawienia strefy czasowej.
  • Użyj wiersza poleceń za pomocą adb:

    • Aby zrzucić stan time_zone_detector, użyj polecenia adb shell cmd time_zone_detector dump
    • Aby zmienić ustawienia urządzenia, użyj innych poleceń time_zone_detector. Więcej informacji znajdziesz na stronie adb shell cmd time_zone_detector help.

Poniżej znajdziesz przykład wyniku polecenia adb shell cmd time_zone_detector dump z informacjami o bieżącym algorytmie i stanie usługi wyróżnionymi pogrubieniem:

$ 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 z powodu działania kontrolera zasad dotyczących urządzenia.
mTelephonyDetectionSupported Określa, czy urządzenie ma funkcję wykrywania strefy czasowej na podstawie telefonii.
mGeoDetectionSupported Określa, czy urządzenie obsługuje wykrywanie strefy czasowej lokalizacji. Jest to obowiązujący stan na podstawie konfiguracji i obecności co najmniej jednej strefy LTZP.
mAutoDetectionEnabled Określa, czy automatyczne wykrywanie strefy czasowej jest włączone.
mLocationEnabled Główny przełącznik lokalizacji.
mGeoDetectionEnabled Przełącznik algorytmu: false oznacza algorytm telefoniczny, a true – algorytm lokalizacji.

Informacje o historii sugestii wskazują, jakie sugestie zostały zaproponowane w Ustawieniach (ręcznie) oraz przez algorytmy telefonii i lokalizacji.