Przegląd czasu

Na tej stronie opisano, jak działa wykrywanie czasu i strefy czasowej w systemie Android. Obejmuje to automatyczne wykrywanie przez Androida stref czasowych i czasowych, opcje konfiguracji dla producentów urządzeń oraz informacje testowe.

Przegląd czasu i stref czasowych

Aby określić czas lokalny użytkownika i wyświetlić go w lokalizacjach takich jak pasek stanu, system Android śledzi dwa powiązane, ale niezależne stany:

  • Bieżący czas epoki Uniksa
  • Bieżąca strefa czasowa

Bieżący czas epoki Uniksa i bieżąca strefa czasowa to stany obejmujące całe urządzenie, co oznacza, że ​​są wspólne dla wszystkich użytkowników urządzenia.

Bieżący czas epoki Uniksa nie jest wartością stałą. Aktualizuje się automatycznie, aby odzwierciedlić upływ czasu. Oprócz normalnego upływu czasu, bieżący czas epoki Uniksa urządzenia jest korygowany, jeśli okaże się, że jest nieprawidłowy, na przykład po utracie zasilania urządzenia.

Bieżąca strefa czasowa określa korektę, jaką należy wprowadzić w celu konwersji bieżącego czasu epoki Uniksa na czas lokalny. Na przykład latem w Los Angeles urządzenie odejmuje 7 godzin od bieżącego czasu epoki Uniksa, a zimą 8 godzin.

Aby wspierać obliczenia czasu lokalnego, wszystkie urządzenia z Androidem mają bazę danych wszystkich globalnych reguł stref czasowych . Aby uzyskać więcej informacji na temat reguł dotyczących stref czasowych, zobacz sekcję Reguły dotyczące stref czasowych .

Kiedy użytkownik podróżuje do nowej lokalizacji, która używa innej strefy czasowej, bieżący czas epoki Uniksa nie musi być dostosowywany, ale użytkownik zazwyczaj chce zobaczyć czas lokalny, a nie czas w swojej poprzedniej lokalizacji. Zmiana bieżącej strefy czasowej zapewnia zastosowanie prawidłowego przesunięcia do czasu bieżącej epoki systemu Unix w celu wyświetlenia prawidłowego czasu lokalnego dla nowej lokalizacji.

AOSP pozwala użytkownikom niezależnie kontrolować, czy czas i strefa czasowa są dla nich ustawiane automatycznie, poprzez poniższe mechanizmy.

  • 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ą, aktualną strefę czasową.

Automatyczne wykrywanie czasu

W tej sekcji omówiono usługę time_detector , która zarządza automatycznym wykrywaniem czasu, kontrolą użytkownika, opcjami konfiguracji i szczegółami testowania.

Usługa time_detector

Usługa time_detector , obecna na urządzeniach z systemem Android 10 lub nowszym, zarządza automatycznym wykrywaniem czasu. Dostosowuje bieżący czas epoki Uniksa urządzenia zgodnie z potrzebami, gdy włączone jest automatyczne wykrywanie czasu.

Usługa time_detector zawsze znajduje się w jednym z dwóch stanów: niepewny lub pewny . O pewnym lub niepewnym stanie usługi decydują sugestie czasowe , które otrzymuje z różnych źródeł.

Gdy usługa time_detector jest pewna, co oznacza, że ​​otrzymała sugestię zawierającą informację o czasie epoki Uniksa, zastępuje bieżący czas epoki Uniksa, jeśli sugestia czasu różni się od bieżącego czasu epoki Uniksa.

Gdy time_detector jest niepewny, 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ę również niepewna, jeśli otrzymane sugestie zostaną uznane za zbyt stare, aby można je było wykorzystać. Brany jest pod uwagę wiek sugestii, ponieważ korekty przy użyciu sugestii dotyczących czasu epoki starego Uniksa opierają się na zegarze czasu rzeczywistego, który upłynął na urządzeniu, i który zakłada się, że jest niedokładny przez długie okresy czasu.

Aby automatycznie ustalić bieżący czas epoki Uniksa, urządzenie ma różne źródła, z których może skorzystać. W tym dokumencie nazywane są one źródłami . 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 zapis najnowszych sugestii wysuniętych przez każde źródło. Nowe sugestie są przesyłane do time_detector , jeśli źródło ma dostępne nowsze informacje o czasie epoki Uniksa. Usługa time_detector ponownie ocenia nowe i istniejące sugestie oraz aktualizuje stan urządzenia po otrzymaniu sugestii.

Chociaż czas UTC jest uzgodniony na szczeblu międzynarodowym, istnieje wiele powodów, dla których ustalenie bieżącego czasu epoki Uniksa nie zawsze jest proste w przypadku urządzenia z Androidem:

  • Czas epoki uniksowej to system pomiaru czasu nieznacznie różniący się od czasu UTC. Konwersja między nimi wymaga wiedzy o tym, kiedy występują sekundy przestępne i jak są one obsługiwane przez pochodzenie.
  • Źródła mogą być dostępne tylko w określonych godzinach lub w określonych okolicznościach. Na przykład, jeśli źródło wymaga połączenia sieciowego, może ono być dostępne tylko wtedy, gdy urządzenie jest podłączone do Internetu.
  • Źródła mogą być niedokładne lub nieprecyzyjne albo zawierać błędy. Na przykład, jeśli wieża telefonii komórkowej nie śledzi poprawnie „czasu uniwersalnego”, źródło sygnału telefonicznego może podawać niedokładne sugestie czasu.
  • Podczas uzyskiwania czasu epoki Uniksa mogą wystąpić niedokładności. Na przykład opóźnienie sieci, buforowanie lub planowanie procesów może spowodować, że czas epoki Uniksa będzie niedokładny.
  • Zegar referencyjny używany do dostosowania sugestii pod względem czasu, jaki upłynął od jej otrzymania, może być niedokładny.

Istnieją dwa główne źródła wykrywania czasu skonfigurowane domyślnie do użycia w AOSP:

  • Sieć : wykorzystuje serwery czasu protokołu Network Time Protocol (NTP).
  • Telefonia: wykorzystuje sygnały telefoniczne dotyczące tożsamości sieci i strefy czasowej (NITZ).

Zarówno telefonia, jak i sieci wymagają łączności z sieciami zewnętrznymi, które nie zawsze są dostępne.

Począwszy od Androida 12, Android obsługuje również następujące źródła, które nie są domyślnie skonfigurowane do użytku:

  • GNSS : Korzysta z dostawcy lokalizacji GPS w celu uzyskania czasu ze źródła GNSS.
  • Zewnętrzne : Ogólne pochodzenie, które pozwala producentom urządzeń zintegrować własne źródło czasu epoki Uniksa.

Ustawienia czasu

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

Automatyczne wykrywanie czasu w Ustawieniach

Rysunek 1. Automatyczne wykrywanie czasu w Ustawieniach.

W poniższej tabeli opisano elementy sterujące użytkownika dotyczące wykrywania czasu w aplikacji Ustawienia AOSP.

*W Androidzie 11 i starszych to ustawienie ma etykietę Użyj czasu podawanego przez sieć

Lokalizacja ustawień AOSP Nazwa ustawień AOSP Zakres Zachowanie
System > Data i godzina Ustaw czas automatycznie* Wszyscy użytkownicy

Przełącznik.

Gdy jest włączone , urządzenie jest odpowiedzialne za wykrywanie aktualnego czasu epoki Uniksa. Gdy opcja ta jest wyłączona , użytkownicy mają możliwość ręcznego ustawiania czasu urządzenia.

Kiedy użytkownik wprowadza czas ręcznie, wprowadza swój czas lokalny, a nie czas epoki Uniksa. Bieżący czas epoki Uniksa jest obliczany przy użyciu bieżącej strefy czasowej w celu uzyskania czasu epoki Uniksa.

Konfiguracja

Producenci urządzeń mogą konfigurować usługę time_detector na różne sposoby, np. jakiego źródła mają używać i jak ustalać priorytety dla pochodzących z nich sygnałów.

Priorytetyzowanie pochodzenia

Od wersji Androida 12 producenci urządzeń mogą zmienić plik konfiguracyjny core/res/res/values/config.xml aby określić, który czas ma być uwzględniany w automatycznym wykrywaniu czasu, oraz priorytet, z jakim time_detector uwzględnia te początki.

W przypadku urządzeń z Androidem 11 lub starszym priorytet pochodzenia 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 systemie Android 12 sugestie dotyczące sieci i telefonii są domyślnie skonfigurowane jako źródła. Sugestie dotyczące czasu sieciowego mają wyższy priorytet niż sugestie dotyczące czasu połączenia telefonicznego. Producenci urządzeń mogą zmienić kolejność źródeł, aby powrócić do zachowania z Androida 11 lub starszego, gdzie wyższy priorytet ma telefonia.

Domyślnie, jeśli prawidłowa sugestia o najwyższym priorytecie odpowiada aktualnemu czasowi zegara systemowego urządzenia z dokładnością do kilku sekund, czas urządzenia nie zostanie zmieniony. Ma to na celu uniknięcie tworzenia pracy dla zainstalowanych aplikacji, które nasłuchują intencji ACTION_TIME_CHANGED .

Dozwolone wartości pochodzenia to:

Dozwolone ograniczenia czasowe

W Androidzie 14 wprowadzono górny limit czasowy dla sugestii czasowych otrzymywanych przez usługę time_detector . Jeśli urządzenie obsługuje procesy 32-bitowe, struktura ustawia górną granicę czasu, aby uniemożliwić urządzeniu użycie sugestii czasu, która mogłaby wywołać problem Y2038.

W systemie Android 12 wprowadzono dolną granicę czasu używaną do sprawdzania sugestii dotyczących czasu otrzymanych przez usługę time_detector . Dolna wartość ograniczenia czasowego 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 przypadać przed zbudowaniem obrazu systemu urządzenia. Jeśli sugestia czasu jest wcześniejsza niż dolna granica czasu, usługa time_detector odrzuca sugestię, ponieważ nie może ona być prawidłowa, jeśli znacznik czasu kompilacji jest poprawny.

W przypadku urządzeń z systemem Android 11 lub starszym usługa time_detector nie sprawdza przychodzących sugestii czasu epoki systemu Unix.

Debugowanie i testowanie czasu

Ta sekcja zawiera informacje o tym, jak debugować i testować zachowanie usługi time_detector i innych komponentów współdzielonych 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

Dane wyjściowe pomocy opisują również właściwości usługi Device_config, których można użyć do wpływania na zachowanie time_detector na potrzeby testowania lub produkcji. Aby uzyskać szczegółowe informacje, zobacz Konfigurowanie urządzenia za pomocą usługi Device_config .

Aby zweryfikować automatyczne wykrywanie czasu, testerzy muszą wiedzieć, z jakiego źródła korzysta usługa time_detector . Poniżej znajduje się przykład danych wyjściowych polecenia adb shell cmd time_detector dump , z pogrubioną czcionką informacji o bieżącym pochodzeniu i stanie usługi:

$ 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 można interpretować w następujący sposób:

Klucz Wartość
mEnvironment.isAutoTimeDetectionEnabled() Czy włączone jest automatyczne wykrywanie czasu.
mEnvironment.autoTimeLowerBound() Bieżąca dolna granica używana do sprawdzania sugestii dotyczących czasu.
mEnvironment.autoOriginPriorities() Pochodzenie stosowania i kolejność priorytetów.

Dziennik zmian czasu wskazuje sytuacje, w których usługa time_detector zmieniła bieżący czas epoki Uniksa urządzenia.

Informacje o historii sugestii wskazują, jakie sugestie zostały wysunięte przez każde źródło.

Automatyczne wykrywanie strefy czasowej

Ta sekcja zawiera omówienie usługi time_zone_detector , która zarządza automatycznym wykrywaniem strefy czasowej, kontrolą użytkownika w ustawieniach, wykrywaniem strefy czasowej w telefonii i lokalizacji oraz szczegółami testowania.

Usługa time_zone_detector

Usługa time_zone_detector , obecna na urządzeniach z systemem Android 11 lub nowszym, zarządza automatycznym wykrywaniem strefy czasowej. Dostosowuje aktualną strefę czasową urządzenia w razie potrzeby, gdy włączone jest automatyczne wykrywanie strefy czasowej.

Gdy włączone jest automatyczne wykrywanie strefy czasowej, time_zone_detector może znajdować się w jednym z dwóch stanów: niepewny i 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. Gdy jest niepewny, oznacza to, że nie otrzymał żadnych informacji lub otrzymał jedynie informacje o niskim stopniu pewności, co oznacza, że ​​nie zastąpi bieżącej strefy czasowej.

Niektóre stany usługi time_zone_detector mogą obejmować stany, w których time_zone_detector nie ma informacji o strefie czasowej do wykorzystania lub gdy ma wiele stref czasowych do wyboru. Stany te są następujące:

  • Określony stan z zerową strefą czasową zostaje wprowadzony, gdy urządzenie znajduje się w miejscu bez strefy czasowej, na przykład na wodach międzynarodowych lub na obszarze spornym. Ten stan jest podobny do stanu niepewnego, ale wskazuje, że time_zone_detector nie musi podejmować dalszych działań, aby spróbować określić strefę czasową.
  • W przypadku niejednoznaczności lub warunków granicznych wprowadzany jest określony stan z wieloma strefami czasowymi. W tym stanie, jeśli bieżąca strefa czasowa jest jedną ze stref czasowych, co do których time_zone_detector jest pewien, bieżąca strefa czasowa pozostaje bez zmian. W przeciwnym razie używana jest jedna z dostępnych stref czasowych. Daje to time_zone_detector element lepkości, jeśli użytkownik wcześniej ręcznie wybrał swoją strefę czasową lub gdy urządzenie zbliża się do granicy.

Pewny lub niepewny stan usługi time_zone_detector jest określany na podstawie sugestii stref czasowych wysyłanych przez algorytm .

Ogólnie rzecz biorąc, sugestie występują w dwóch typach, które ściśle odpowiadają możliwym stanom time_zone_detector : pewne i niepewne . Poniżej znajdują się przykłady typów sugestii:

  • typ = uncertain , zoneIds = []

    • Algorytm nie wie, jaka jest strefa czasowa.
  • type = certain , zoneIds = ["Europe/London"]

    • Algorytm jest pewien, że strefa to Europa/Londyn.
  • typ = certain , zoneIds = [] `

    • Algorytm jest pewny, ale z bieżącą lokalizacją nie jest powiązany żaden identyfikator strefy.
  • typ = certain , zoneIds = ["America/Denver", "America/Phoenix"]

    • Algorytm jest pewien, że odpowiedzią jest jedna z dwóch stref, ale nie może wybrać pomiędzy „Ameryką/Denver” a „Ameryką/Phoenix”.

Usługa time_zone_detector traktuje sekwencje sugestii jako odrębne na podstawie ich algorytmu. W zależności od algorytmu sugestie mogą również zawierać metadane wskazujące pewność algorytmu.

Usługa time_zone_detector jest stanowa, co oznacza, że ​​przechowuje zapis najnowszej sugestii wysuniętej przez każdy algorytm. Nowe sugestie są wysyłane do usługi time_zone_detector , jeśli poprzednia sugestia nie jest już poprawna; to znaczy, jeśli algorytm ma teraz inną sugestię lub utracił zdolność wykrywania strefy czasowej. Usługa time_zone_detector ponownie ocenia nowe i istniejące sugestie oraz aktualizuje stan urządzenia po otrzymaniu sugestii.

Android obsługuje dwa algorytmy wykrywania strefy czasowej:

  • Telefonia
  • Lokalizacja

Usługa time_zone_detector zazwyczaj używa jednego algorytmu do określenia strefy czasowej. Jeśli urządzenie obsługuje algorytm lokalizacji, algorytm używany przez urządzenie jest określany na podstawie ustawień strefy czasowej skonfigurowanych przez użytkownika. Gdy używany algorytm nie jest pewien co do strefy czasowej, time_zone_detector zwykle nie korzysta z sugestii z innego algorytmu. Sugestie powiązane z nieużywanymi algorytmami mogą być przechowywane w pamięci przez time_zone_detector , ale nie są używane, chyba że algorytm się zmieni. Gdy użytkownik zmieni ustawienia automatycznego wykrywania strefy czasowej i nastąpi zmiana algorytmu, zostanie wykorzystana najnowsza sugestia dostępna dla nowego algorytmu.

Aby uzyskać szczegółowe informacje na temat sytuacji, w której do określenia strefy czasowej używanych jest wiele algorytmów, zobacz temat Tryb awaryjny telefonii .

Tryb awaryjny telefonii

Na urządzeniach z systemem Android 13 i nowszym usługa time_zone_detector obsługuje tryb awaryjny telefonii . Ten tryb pozwala systemowi Android tymczasowo korzystać z sugestii dotyczących wykrywania telefonii w sytuacjach, gdy wykrywanie lokalizacji nie jest w stanie wykryć strefy czasowej lub gdy wykrywanie lokalizacji trwa dłużej niż wykrywanie telefonii.

Tryb awaryjny telefonii dotyczy urządzeń, na których obsługiwana jest zarówno telefonia, jak i wykrywanie lokalizacji, i na których użytkownik włączył opcję Użyj lokalizacji, aby ustawić strefę czasową w Ustawieniach strefy czasowej . Tryb włącza się automatycznie po ponownym uruchomieniu urządzenia i wyłączeniu trybu samolotowego.

W systemie Android 14 i nowszych wersjach funkcję awaryjnego połączenia telefonicznego można uruchomić za pośrednictwem interfejsów API raportowania stanu LTZP . Oznacza to, że jeśli urządzenie LTZP zgłosi, że jest niepewne , a jego zdolność do wykrywania lokalizacji lub strefy czasowej jest ograniczona przez jego środowisko, zostaje uruchomiony tryb awaryjny telefonii.

W trybie awaryjnym telefonii usługa time_zone_detector korzysta z 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 wykorzystywane są wyłącznie sugestie lokalizacji.

Aby poznać szczegóły konfiguracji trybu awaryjnego telefonii, zobacz 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 poniższej tabeli opisano elementy sterujące 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 Zachowanie
System > Data i godzina Ustaw strefę czasową automatycznie* Wszyscy użytkownicy

Przełącznik.

Gdy jest włączone , urządzenie odpowiada za wykrycie aktualnej strefy czasowej. Gdy opcja ta jest wyłączona , użytkownicy mają możliwość ręcznego ustawienia strefy czasowej urządzenia.

System > Data i godzina Użyj lokalizacji , aby ustawić strefę czasową Aktualny użytkownik

Przełącznik.

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

Aby zapoznać się ze zmianami wprowadzonymi w wersji 14, zobacz Urządzenia obsługujące tylko wykrywanie strefy czasowej lokalizacji .

Lokalizacja Użyj lokalizacji Aktualny użytkownik

Przełącznik.

Zezwala lub uniemożliwia ogólne wykorzystanie lokalizacji urządzenia. Wartość ma znaczenie, jeśli urządzenie obsługuje wykrywanie strefy czasowej lokalizacji.

Poniżej przedstawiono przegląd zachowania urządzenia w przypadku wykrywania strefy czasowej, biorąc pod uwagę ustawienia wybrane 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:

    • [Lokalizacja] Użyj lokalizacji: WYŁ

      • Do wykrywania strefy czasowej wykorzystywane są sygnały telefoniczne.
    • [Lokalizacja] Użyj lokalizacji:

      • [Data i godzina] Użyj lokalizacji, aby ustawić strefę czasową:

        • Lokalizacja służy do wykrywania strefy czasowej.
      • [Data i godzina] Użyj lokalizacji, aby ustawić strefę czasową: WYŁ

        • Do wykrywania strefy czasowej wykorzystywane są sygnały telefoniczne.

Wiele urządzeń użytkownika

Ponieważ zakres niektórych ustawień obejmuje bieżącego użytkownika, zachowanie wykrywania strefy czasowej urządzenia może się zmienić, gdy bieżący użytkownik zmieni się na urządzeniu z systemem Android obsługującym wielu użytkowników.

Przełącznik Użyj lokalizacji, aby ustawić strefę czasową jest ograniczony do bieżącego użytkownika i nie jest ograniczony zasadami dotyczącymi urządzeń, 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 elementy sterujące czasem lub strefą czasową są ograniczone przez kontroler Device Policy Controller.

Urządzenia obsługujące wyłącznie algorytm wykrywania strefy czasowej lokalizacji

W tej sekcji opisano zachowanie urządzeń obsługujących tylko algorytm lokalizacji.

  • Android 14 i nowszy

    • Opcja Użyj lokalizacji nie jest widoczna dla użytkowników w aplikacji Ustawienia AOSP, a urządzenie zachowuje się tak, jakby opcja Użyj lokalizacji była włączona.
    • Wartość ustawienia SettingsProvider o zasięgu użytkownika location_time_zone_detection_enabled jest ignorowana. Ta wartość rejestruje preferencje użytkownika dotyczące innych typów urządzeń.
  • Androida 12 lub Androida 13

    • Opcja Użyj lokalizacji jest widoczna dla użytkowników w aplikacji Ustawienia AOSP i użytkownicy mogą wyłączyć tę opcję. Jeżeli opcja jest wyłączona, urządzenie nie będzie automatycznie wykrywało strefy czasowej.

Zachowanie przy przejściu na i z automatycznego wykrywania

Kiedy użytkownik przełącza wykrywanie strefy czasowej z ręcznego na automatyczne , time_zone_detector może już mieć pewność co do bieżącej strefy czasowej. Jeśli tak, po włączeniu przez użytkownika automatycznego wykrywania, strefa czasowa urządzenia może zostać jednocześnie zmieniona, aby była zgodna z opinią usługi time_zone_detector .

Podobnie, gdy użytkownik dokona zmian w Ustawieniach, które skutkują zmianą bieżącego algorytmu usługi time_zone_detector , time_zone_detector mogła już otrzymać sugestie dotyczące nowego algorytmu, więc czas urządzenia może zostać zmieniony tak, aby natychmiast odpowiadał opinii usługi time_zone_detector .

Wykrywanie strefy czasowej telefonii

Wykrywanie strefy czasowej telefonii wykorzystuje sygnały telefoniczne do określenia bieżącej strefy czasowej. Aby uzyskać więcej informacji, zobacz temat Wykrywanie strefy czasowej telefonii .

Wykrywanie strefy czasowej lokalizacji

Wykrywanie strefy czasowej lokalizacji jest dostępne w systemie Android 12 lub nowszym. Jest to opcjonalna funkcja automatycznego wykrywania strefy czasowej, która umożliwia urządzeniom wykorzystanie ich lokalizacji do określenia bieżącej strefy czasowej.

Wprowadzona w systemie Android 12 location_time_zone_manager działa na serwerze systemowym i zawiera kod odpowiedzialny za przesyłanie sugestii algorytmów lokalizacji do usługi time_zone_detector . Aby uzyskać więcej informacji, zobacz temat Wykrywanie strefy czasowej lokalizacji .

Uwagi dotyczące przyjęcia funkcji

W tej sekcji opisano aspekty funkcji wykrywania strefy czasowej lokalizacji, aby pomóc producentowi urządzenia określić, czy zastosować tę funkcję w urządzeniu.

Porównanie telefonii i wykrywania lokalizacji

Poniższa tabela zawiera porównanie zalet i wad korzystania z sygnałów lokalizacyjnych zamiast sygnałów telefonicznych do wykrywania strefy czasowej.

Wykrywanie telefonii Wykrywanie lokalizacji
Poprawność Różni się w zależności od kraju.

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

Poprawność zazwyczaj różni się w zależności od:
  • Dokładność i regularność dostawcy lokalizacji.
  • Jakość danych mapy stref czasowych.
Możliwość aktualizacji Wykrywanie telefonii opiera się na plikach zawartych w aktualizowalnym module danych strefy czasowej (com.android.tzdata APEX). Zależy od konfiguracji funkcji lub komponentów wtyczki.

Możliwość aktualizacji zazwyczaj zależy od tego, czy urządzenie korzysta z danych mapy strefy czasowej serwera czy klienta.

Uwaga: dane mapy stref czasowych nie są zawarte w module danych strefy czasowej używanym do aktualizowania kopii TZDB i innych informacji o strefie czasowej systemu Android.

Producenci urządzeń muszą także wziąć pod uwagę zgodność wersji między zasadami dotyczącymi 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 zazwyczaj tego, czego inne aplikacje żądają lokalizacji.
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żytkownika

Preferowana strefa czasowa użytkownika jest zwykle określana na podstawie jego położenia geograficznego. Lokalizacja to wrażliwe dane. Użytkownicy mogą obawiać się, że wiedza o ich lokalizacji zostanie udostępniona w ramach wykrywania strefy czasowej. Niezależnie od wykrywania strefy czasowej wszystkie aplikacje działające na urządzeniu mogą odczytać bieżącą strefę czasową urządzenia bez konieczności posiadania uprawnień systemu Android, a aplikacje mogą na podstawie tych informacji wywnioskować niedokładne pojęcie o lokalizacji urządzenia.

Mówiąc dokładniej, wykrywanie strefy czasowej może działać w sposób pasywny lub aktywny:

  • Pasywny: Coś w otoczeniu urządzenia informuje urządzenie o strefie czasowej, która ma być używana w tym środowisku.
  • Aktywne: Urządzenie musi samodzielnie ustalić strefę czasową i w zależności od ustawień prywatności użytkowników i ich zgody uzyskuje w tym celu lokalizację urządzenia. Może następnie udostępnić swoją lokalizację usługom zewnętrznym. Aby uzyskać szczegółowe informacje na temat prywatności i zgody użytkowników, zobacz dyskusję poniżej.

Wykrywanie pasywne, np. za pomocą algorytmu telefonicznego, nie ma żadnego dodatkowego wpływu na prywatność użytkowników.

Aktywne wykrywanie, na przykład za pomocą algorytmu lokalizacji, polega na określeniu lokalizacji urządzenia, na co użytkownicy mogą nie chcieć się zgodzić, a lokalizacja może zostać przesłana przez sieć w celu ustalenia identyfikatora strefy czasowej.

Podejście Androida do prywatności użytkowników w zakresie wykrywania stref czasowych daje użytkownikowi możliwość indywidualnego wyłączania algorytmów, które mają być aktywne. Ponadto kod platformy AOSP nie zajmuje się bezpośrednio samą lokalizacją: wykrywanie lokalizacji i mapowanie lokalizacji na identyfikatory stref czasowych pozostawia się komponentom wtyczek skonfigurowanym przez producentów urządzeń.

Aby uzyskać więcej informacji na temat funkcji prywatności użytkownika, zobacz Wykrywanie strefy czasowej lokalizacji .

Konfiguracja

Producenci urządzeń mogą skonfigurować usługę time_zone_detector , aby zmienić jej zachowanie. W tej sekcji opisano opcje konfiguracji ogólnego zachowania usługi time_zone_detector . Aby uzyskać szczegółowe informacje o konfiguracji algorytmów wykrywania telefonii i strefy czasowej, zobacz Wykrywanie strefy czasowej telefonii i Wykrywanie strefy czasowej lokalizacji .

Podstawowa konfiguracja AOSP znajduje się w frameworks/base/core/res/res/values/config.xml .

Klucz konfiguracyjny Wartość AOSP Opis
config_supportTelephonyTimeZoneFallback true Gdy true , time_zone_detector używa trybu awaryjnego telefonii. Jest to dostępne dla Androida 13 i nowszych wersji.

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ść 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, uwzględnij auto_time_zone w tablicy restore_blocked_global_settings zdefiniowanej w frameworks/base/packages/SettingsProvider/res/values/blocked_settings.xml .

Debugowanie i testowanie stref czasowych

Ta sekcja zawiera informacje o tym, jak debugować i testować zachowanie usługi time_zone_detector i innych komponentów współdzielonych przez wszystkie algorytmy.

Konfiguracja urządzenia za pomocą usługi Device_config

Usługa device_config to mechanizm używany w systemie Android do konfigurowania modyfikowalnego zachowania przy użyciu wartości, które zwykle są pobierane ze zdalnego serwera za pomocą zastrzeżonego kodu (innego niż AOSP). Podczas używania wartości device_config do testowania, szczególnie podczas długotrwałych testów ręcznych, urządzenie może zsynchronizować flagi, co spowoduje zresetowanie flag i wyczyszczenie wartości ustawionych do testowania.

W systemie Android 12 lub nowszym, aby tymczasowo uniemożliwić synchronizację flag, użyj:

adb shell cmd device_config set_sync_disabled_for_tests persistent

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

adb shell cmd device_config set_sync_disabled_for_tests none

Po przywróceniu synchronizacji flag zrestartuj urządzenie.

Aby uzyskać więcej informacji, skorzystaj z $ adb shell cmd device_config help .

Interakcja z usługą time_zone_detector

Aby wyświetlić konfigurację i time_zone_detector time_zone_detector użyj:

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ą także właściwości usługi device_config , których można użyć do wpływania na zachowanie usługi time_zone_detector na potrzeby testowania lub w środowisku produkcyjnym. Aby uzyskać szczegółowe informacje, zobacz Konfigurowanie urządzenia za pomocą usługi Device_config .

Aby zweryfikować wykrywanie strefy czasowej, testerzy muszą wiedzieć, jakiego algorytmu używa time_zone_detector . Aby zrozumieć i wpłynąć na bieżący algorytm time_zone_detector , użyj jednej z następujących opcji:

  • Sprawdź wizualnie w interfejsie ustawień. Aby uzyskać więcej informacji, zobacz Ustawienia strefy czasowej .
  • Użyj wiersza poleceń poprzez adb:

    • Aby zrzucić stan time_zone_detector , użyj adb shell cmd time_zone_detector dump
    • Aby zmienić ustawienia urządzenia, użyj innych poleceń time_zone_detector . Aby uzyskać więcej informacji, skorzystaj z adb shell cmd time_zone_detector help .

Poniżej znajduje się przykład wyniku polecenia zrzutu adb shell cmd time_zone_detector dump , z pogrubioną czcionką informacji o bieżącym algorytmie i stanie usługi:

$ 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 można interpretować w następujący sposób:

Klucz Wartość
mUserConfigAllowed Czy użytkownik nie może kontrolować ustawień daty i godziny przez kontroler Device Policy Controller .
mTelephonyDetectionSupported Czy urządzenie ma funkcję wykrywania strefy czasowej w telefonie.
mGeoDetectionSupported Czy urządzenie obsługuje wykrywanie strefy czasowej lokalizacji. Jest to stan efektywny , oparty na konfiguracji i obecności co najmniej jednego LTZP.
mAutoDetectionEnabled Czy włączone jest automatyczne wykrywanie strefy czasowej.
mLocationEnabled Główny przełącznik lokalizacji.
mGeoDetectionEnabled Przełącznik algorytmu: false wskazuje algorytm telefonii, a true wskazuje algorytm lokalizacji.

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