Przegląd czasu

Na tej stronie opisano, jak działa wykrywanie czasu i strefy czasowej w systemie Android. Obejmuje to sposób, w jaki Android automatycznie wykrywa czas i strefy czasowe, opcje konfiguracji dla producentów urządzeń oraz informacje o testach.

Przegląd czasu i stref czasowych

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

  • Bieżący czas epoki systemu Unix
  • Bieżąca strefa czasowa

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

Bieżący czas epoki systemu Unix nie jest stałą wartością. 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 przez urządzenie.

Bieżąca strefa czasowa określa dostosowanie, które należy wprowadzić, aby przekonwertować bieżący czas epoki Uniksa na czas lokalny. Na przykład latem w Los Angeles urządzenie odejmuje 7 godzin od aktualnego czasu epoki Uniksa, a zimą odejmuje 8 godzin.

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

Kiedy użytkownik podróżuje do nowej lokalizacji, która używa innej strefy czasowej, nie trzeba dostosowywać bieżącego czasu epoki Uniksa, ale użytkownik zazwyczaj chce zobaczyć czas lokalny, a nie czas w poprzedniej lokalizacji. Zmiana bieżącej strefy czasowej zapewnia zastosowanie prawidłowego przesunięcia do bieżącego czasu 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 za pomocą następujących mechanizmów.

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

Automatyczne wykrywanie czasu

Ta sekcja zawiera omówienie usługi time_detector , która zarządza automatycznym wykrywaniem czasu, kontrolkami użytkownika, opcjami konfiguracji i szczegółami testowania.

Usługa time_detector

Usługa time_detector , obecna na urządzeniach z Androidem 10 lub nowszym, zarządza automatycznym wykrywaniem czasu. W razie potrzeby dostosowuje bieżący czas epoki systemu Unix urządzenia, gdy włączone jest automatyczne wykrywanie czasu.

Usługa time_detector jest zawsze w jednym z dwóch stanów: niepewny lub pewny . Pewny lub niepewny stan usługi jest określany na podstawie sugestii czasowych , które otrzymuje z różnych źródeł.

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

Gdy time_detector jest niepewny, nie zastępuje bieżącego czasu. Niepewny stan zwykle oznacza, że ​​usługa time_detector nie otrzymała sugestii czasu. Usługa time_detector staje się również niepewna, jeśli otrzymane sugestie zostaną uznane za zbyt stare, aby można ich było użyć. Wiek sugestii jest brany pod uwagę, ponieważ korekty przy użyciu sugestii czasu epoki starego systemu Unix opierają się na zegarze czasu rzeczywistego, który upłynął w urządzeniu, co zakłada się, że jest niedokładne przez długi czas.

Aby automatycznie ustalić bieżący czas epoki systemu Unix, urządzenie ma różne źródła, z których może korzystać. W tym dokumencie są one nazywane źródłami . Usługa time_detector traktuje sekwencje sugestii jako odrębne na podstawie ich pochodzenia.

Usługa time_detector jest stanowa, co oznacza, że ​​przechowuje zapis ostatniej sugestii przesłanej przez każde źródło. Nowe sugestie są wprowadzane do time_detector , jeśli źródło ma nowsze dostępne 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 całym świecie, istnieje wiele powodów, dla których ustalenie aktualnego czasu epoki systemu Unix nie zawsze jest proste w przypadku urządzenia z systemem Android:

  • 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ą one obsługiwane przez pochodzenie.
  • Origins może 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 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. Na przykład, jeśli wieża telefonii komórkowej nie śledzi poprawnie „czasu uniwersalnego”, źródło telefonii może dostarczać niedokładnych sugestii dotyczących czasu.
  • Mogą wystąpić nieścisłości podczas uzyskiwania czasu epoki Uniksa. Na przykład opóźnienie sieci, buforowanie lub planowanie procesów może spowodować, że czas epoki systemu Unix będzie niedokładny.
  • Zegar referencyjny użyty do dostosowania sugestii do czasu, który upłynął od otrzymania sugestii, może być niedokładny.

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

  • Telefonia: wykorzystuje sygnały telefoniczne tożsamości sieciowej i strefy czasowej (NITZ).
  • Sieć: korzysta z serwerów czasu NTP (Network Time Protocol).

Zarówno źródła telefoniczne, jak i sieciowe 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 umożliwia producentom urządzeń zintegrowanie własnego źródła czasu epoki Uniksa.

Ustawienia czasu

Użytkownicy mogą włączyć automatyczne wykrywanie czasu w 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 kontrolki użytkownika służące do wykrywania czasu w aplikacji Ustawienia AOSP.

*W Androidzie 11 i starszych to ustawienie jest oznaczone jako Użyj czasu podanego 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 Unix. Gdy jest wyłączona , użytkownicy mają do dyspozycji elementy sterujące umożliwiające ręczne ustawienie czasu urządzenia.

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

Konfiguracja

Producenci urządzeń mogą konfigurować usługę time_detector na różne sposoby, na przykład, które źródła mają być używane i jak ustalać priorytety sygnałów z nich.

Priorytet pochodzenia

Począwszy od systemu Android 12, producenci urządzeń mogą zmienić plik konfiguracyjny core/res/res/values/config.xml aby określić, które źródła czasu mają być uwzględniane w automatycznym wykrywaniu czasu, oraz priorytet, w jakim time_detector uwzględnia te źródła.

W przypadku urządzeń z Androidem 11 lub starszym priorytet miejsca pochodzenia jest ustawiony na stałe jako ["telephony", "network"] , co oznacza, że ​​sugestie telefoniczne 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 skonfigurowane jako źródła do użycia. Sugestie dotyczące czasu w sieci mają wyższy priorytet niż sugestie dotyczące czasu w telefonie. Producenci urządzeń mogą zmienić kolejność pochodzenia, aby powrócić do zachowania z Androida 11 lub starszego, gdzie telefonia ma wyższy priorytet.

Domyślnie, jeśli prawidłowa sugestia o najwyższym priorytecie jest zgodna z bieżącym czasem systemowym 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:

Dolna granica czasu

Android 12 wprowadza dolną granicę czasu, która jest używana do sprawdzania poprawności sugestii czasu odbieranych przez usługę time_detector . Dolna wartość ograniczenia czasowego 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 przed dolną granicą czasu, usługa time_detector odrzuca sugestię, ponieważ nie może być prawidłowa, jeśli sygnatura czasowa kompilacji jest poprawna.

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

Android nie wymusza górnej granicy czasu.

Debugowanie i testowanie czasu

Ta sekcja zawiera informacje dotyczące sposobu debugowania i testowania zachowania usługi time_detector i innych składników, które są współużytkowane 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 do testowania lub w środowisku produkcyjnym. Aby uzyskać szczegółowe informacje, zobacz Konfigurowanie urządzenia za pomocą usługi device_config .

Aby zweryfikować automatyczne wykrywanie czasu, testerzy muszą wiedzieć, z jakich źródeł korzysta usługa time_detector . Poniżej znajduje się przykład danych wyjściowych polecenia adb shell cmd time_zone_detector dump , z pogrubionymi informacjami 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 poprawności sugestii dotyczących czasu.
mEnvironment.autoOriginPriorities() Pochodzenie w użyciu i kolejność pierwszeństwa.

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

Informacje o historii sugestii wskazują, jakie sugestie zostały zgłoszone 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 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. W razie potrzeby dostosowuje aktualną strefę czasową urządzenia, 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 niepewna, oznacza to, że nie otrzymała żadnych informacji lub otrzymała tylko 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ć takie, w których time_zone_detector nie ma informacji o strefie czasowej do użycia lub gdy ma wiele stref czasowych do wyboru. Są to następujące stany:

  • Określony stan z zerowymi strefami czasowymi jest wprowadzany, gdy urządzenie znajduje się gdzieś 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ń w celu określenia strefy czasowej.
  • Określony stan z wieloma strefami czasowymi jest wprowadzany w przypadku niejasności lub warunków granicznych. W tym stanie, jeśli bieżąca strefa czasowa jest jedną ze stref czasowych, których time_zone_detector ma pewność, bieżąca strefa czasowa pozostaje niezmieniona. 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.

Określony lub niepewny stan usługi time_zone_detector jest określany na podstawie sugestii stref czasowych wysyłanych przez źródło .

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 . Oto przykłady typów sugestii:

  • type = "niepewny", zoneIds = []

    • Pochodzenie nie wie, jaka jest strefa czasowa.
  • type = "pewne", zoneIds = ["Europa/Londyn"]

    • Pochodzenie jest pewne, że strefa to „Europa/Londyn”.
  • type = "pewne", zoneIds = []

    • Pochodzenie jest pewne, ale nie ma identyfikatora strefy powiązanego z bieżącą lokalizacją.
  • type = "pewne", zoneIds = ["Ameryka/Denver", "Ameryka/Phoenix"]

    • Pochodzenie jest pewne, że odpowiedź to jedna z dwóch stref, ale nie może wybrać między „Ameryką/Denver” a „Ameryką/Phoenix”.

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

Usługa time_zone_detector jest stanowa, co oznacza, że ​​przechowuje zapis najnowszych sugestii zgłoszonych przez każde źródło. Nowe sugestie są wysyłane do usługi time_zone_detector , jeśli poprzednia sugestia nie jest już poprawna; to znaczy, jeśli źródło ma teraz inną sugestię lub jeśli utraciło 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 źródła wykrywania strefy czasowej:

  • Telefonia
  • Lokalizacja

Usługa time_zone_detector używa tylko jednego źródła do określenia strefy czasowej. Jeśli źródło lokalizacji jest obsługiwane na urządzeniu, bieżące źródło do użycia jest określane na podstawie ustawień strefy czasowej skonfigurowanych przez użytkownika. Gdy bieżące pochodzenie staje się niepewne co do strefy czasowej, time_zone_detector nie używa sugestii z innego źródła. Sugestie związane z pochodzeniem poza bieżącym pochodzeniem mogą być przechowywane w pamięci przez time_zone_detector , ale nie są używane, chyba że zmieni się bieżące pochodzenie. Kiedy użytkownik zmienia ustawienia automatycznego wykrywania strefy czasowej i zmienia się bieżące źródło, używana jest najnowsza sugestia dostępna dla nowego źródła.

Na urządzeniach z Androidem 13 lub nowszym usługa time_zone_detector obsługuje telefoniczny tryb awaryjny . Ten tryb pozwala systemowi Android na tymczasowe korzystanie z sugestii wykrywania przez telefon w sytuacjach, gdy wykrywanie lokalizacji nie może wykryć strefy czasowej lub gdy wykrywanie strefy czasowej trwa dłużej niż wykrywanie przez telefon.

Awaryjny tryb telefonii dotyczy urządzeń, na których obsługiwane są zarówno telefonia, jak i wykrywanie lokalizacji, a użytkownik włączył opcję Użyj lokalizacji, aby ustawić strefę czasową w Ustawieniach strefy czasowej . Tryb jest włączany automatycznie po ponownym uruchomieniu urządzenia i po wyłączeniu trybu samolotowego. W trybie rezerwowym telefonii usługa time_zone_detector używa sugestii telefonicznych tak, jakby wykrywanie lokalizacji było wyłączone, dopóki źródło lokalizacji nie przedstawi określonej sugestii. Po otrzymaniu określonej sugestii tryb awaryjny telefonii zostaje wyłączony i używane są wyłącznie sugestie lokalizacji.

Aby uzyskać szczegółowe informacje na temat konfiguracji awaryjnego trybu telefonii, zobacz Konfiguracja wykrywania stref czasowych .

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 kontrolki użytkownika służące do wykrywania strefy czasowej w aplikacji Ustawienia AOSP.

*W Androidzie 11 i starszych to ustawienie jest oznaczone jako 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łączony , urządzenie odpowiada za wykrywanie aktualnej strefy czasowej. Gdy jest wyłączona , użytkownicy mają do dyspozycji elementy sterujące umożliwiające ręczne ustawienie strefy czasowej urządzenia.

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

Przełącznik.

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

Lokalizacja Użyj lokalizacji Aktualny użytkownik

Przełącznik.

Pozwala lub uniemożliwia ogólne korzystanie z lokalizacji urządzenia. Wartość jest istotna, jeśli urządzenie obsługuje wykrywanie strefy czasowej lokalizacji.

Poniżej przedstawiono przegląd zachowania urządzenia w przypadku wykrywania strefy czasowej z uwzględnieniem ustawień wybranych przez użytkownika:

  • [Data i godzina] Automatyczne ustawienie strefy czasowej: WYŁ

    • Użytkownik musi ręcznie wybrać strefę czasową.
  • [Data i godzina] Automatyczne ustawienie strefy czasowej:

    • [Lokalizacja] Użyj lokalizacji: WYŁ

      • Sygnały telefoniczne służą do wykrywania strefy czasowej. (Patrz przypis poniżej.)
    • [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Ł

        • Sygnały telefoniczne służą do wykrywania strefy czasowej. (Patrz przypis poniżej.)

Wiele urządzeń użytkownika

Ponieważ kilka ustawień dotyczy 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 dla wielu użytkowników.

Przełącznik Użyj lokalizacji do ustawienia strefy czasowej obejmuje bieżącego użytkownika i nie jest ograniczony przez zasady dotyczące urządzeń, co oznacza, że ​​użytkownicy zawsze mogą zmienić jego wartość, nawet jeśli opcja Ustaw automatyczne przełączanie strefy czasowej jest wyłączona lub jeśli inne ustawienia czasu lub strefy czasowej są ograniczone przez kontroler zasad urządzeń.

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

Gdy użytkownik przełączy 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, ponieważ użytkownik umożliwia automatyczne wykrywanie, 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 zmiany w Ustawieniach, która spowoduje zmianę bieżącego pochodzenia usługi time_zone_detector , time_zone_detector mógł już otrzymać sugestie dotyczące nowego pochodzenia, więc czas urządzenia może zostać zmieniony, aby natychmiast odpowiadał opinii usługi time_zone_detector .

Wykrywanie strefy czasowej telefonu

Wykrywanie strefy czasowej telefonii wykorzystuje sygnały telefoniczne do określenia bieżącej strefy czasowej. Aby uzyskać więcej informacji, zobacz Wykrywanie strefy czasowej 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 ich lokalizacji.

Usługa location_time_zone_manager , wprowadzona w Androidzie 12, działa na serwerze systemowym i zawiera kod odpowiedzialny za przesyłanie sugestii pochodzenia lokalizacji do usługi time_zone_detector . Aby uzyskać więcej informacji, zobacz Wykrywanie strefy czasowej lokalizacji .

Uwagi dotyczące przyjmowania 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 używania lokalizacji 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 zależy 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 zwykle zależy od tego, czy urządzenie korzysta z danych mapy stref czasowych serwera, czy klienta.

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

Producenci urządzeń muszą również 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 zazwyczaj tego, jakie 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 dane wrażliwe. Użytkownicy mogą być zaniepokojeni tym, że wiedza o ich lokalizacji jest udostępniana w ramach wykrywania strefy czasowej. Niezwiązane z wykrywaniem strefy czasowej, wszystkie aplikacje uruchomione na urządzeniu mogą odczytywać bieżącą strefę czasową urządzenia bez konieczności posiadania pozwolenia na Androida, a aplikacje mogą wywnioskować nieprecyzyjne wyobrażenie o lokalizacji urządzenia na podstawie tych informacji.

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

  • Pasywny: Coś w środowisku urządzenia informuje urządzenie o strefie czasowej, której ma używać w tym środowisku.
  • Aktywny: Urządzenie musi samodzielnie ustalić strefę czasową iw 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. Zobacz dyskusję poniżej, aby uzyskać szczegółowe informacje na temat prywatności i zgody użytkownika.

Wykrywanie pasywne, takie jak w przypadku pochodzenia telefonicznego, nie ma żadnych dodatkowych konsekwencji dla prywatności użytkowników.

Aktywne wykrywanie, takie jak pochodzenie 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 określenia identyfikatora strefy czasowej.

Podejście systemu Android do prywatności użytkowników w zakresie wykrywania stref czasowych daje użytkownikowi możliwość indywidualnego wyłączania źródeł, które mają być aktywne. Ponadto kod platformy AOSP nie zajmuje się bezpośrednio samą lokalizacją: wykrywanie lokalizacji i mapowanie lokalizacji do identyfikatorów stref czasowych pozostawiono 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 dotyczące ogólnego zachowania usługi time_zone_detector . Aby uzyskać szczegółowe informacje na temat konfiguracji źródeł 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 konfiguracji wartość AOSP Opis
config_supportTelephonyTimeZoneFallback true Kiedy true , `time_zone_detector` użyje trybu awaryjnego telefonii. Jest to obecne na Androidzie 13 i nowszych.

Zmiana domyślnego zachowania urządzenia

W AOSP automatyczne wykrywanie strefy czasowej jest domyślnie włączone z ustawieniem auto_time_zone ustawionym na 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 struktura domyślnie aktualizuje wartość ustawienia auto_time_zone . Jeśli chcesz się upewnić, że to ustawienie nie zostanie przywrócone z kopii zapasowej, dołącz auto_time_zone do 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 składników, które są współużytkowane przez wszystkie źródła.

Konfigurowanie 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 są zwykle pobierane ze zdalnego serwera za pomocą zastrzeżonego (nie-AOSP) kodu. W przypadku używania wartości device_config do testowania, zwłaszcza 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 Androidzie 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 uruchom ponownie 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ę time_zone_detector i stan usługi 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ą również właściwości usługi device_config , których można użyć do wpływania na zachowanie usługi time_zone_detector do 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ć, z jakiego źródła korzysta time_zone_detector . Aby zrozumieć i wpłynąć na bieżące pochodzenie 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ń przez 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, użyj adb shell cmd time_zone_detector help .

Poniżej znajduje się przykład danych wyjściowych polecenia adb shell cmd time_zone_detector dump , z pogrubionymi informacjami o bieżącym pochodzeniu 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 kontroler zasad urządzeń uniemożliwia użytkownikowi kontrolowanie ustawień daty i godziny .
mTelephonyDetectionSupported Czy urządzenie ma wykrywanie strefy czasowej telefonu.
mGeoDetectionSupported Czy urządzenie ma 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 Przełącznik lokalizacji głównej.
mGeoDetectionEnabled Przełącznik źródła: `false` wskazuje źródło telefonii, a `true` wskazuje źródło lokalizacji.

Informacje o historii sugestii wskazują, jakie sugestie zostały wprowadzone w Ustawieniach (instrukcja) oraz według pochodzenia telefonii i lokalizacji.