Przegląd czasu

Z tej strony dowiesz się, jak działa wykrywanie czasu i strefy czasowej na urządzeniach z Androidem. Obejmuje to sposób automatycznego wykrywania czasu i stref czasowych przez Androida, opcje konfiguracji dla producentów urządzeń oraz informacje o testowaniu.

Omówienie czasu i stref czasowych

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

  • Obecny czas uniksowy
  • bieżąca strefa czasowa,

Obecny czas uniksowy i bieżąca strefa czasowa to stany dla poszczególnych urządzeń, co oznacza, że są dostępne dla wszystkich użytkowników urządzenia.

Obecny czas uniksowy nie jest stałą wartością. Aktualizuje się automatycznie na odzwierciedlają upływ czasu. Poza normalnym upływem czasu bieżący Czas uniksowy urządzenia jest korygowany, jeśli okaże się nieprawidłowy, w przypadku na przykład po utracie zasilania.

Obecna strefa czasowa określa korektę, która ma być zastosowana do przekształcenia bieżącego czasu uniksowego w czas lokalny. Na przykład latem w Los Angeles w Anglii, urządzenie odejmuje 7 godzin od obecnego czasu uniksowego oraz w zimą za 8 godzin.

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

Gdy użytkownik podróżuje do nowej lokalizacji w innej strefie czasowej, bieżącego czasu uniksowego nie trzeba dostosowywać, ale zwykle sprawdzać czas lokalny, a nie godzinę w poprzedniej lokalizacji. Zmiana Jeśli bieżąca strefa czasowa zostanie zastosowana do bieżącej strefy czasowej, Czas uniksowy, aby wyświetlać poprawny czas lokalny dla nowej lokalizacji.

AOSP umożliwia użytkownikom samodzielne określanie, czy czas i strefa czasowa mają być ustawiane automatycznie za pomocą tych mechanizmów.

  • Automatyczne wykrywanie czasu: gwarantuje, że urządzenie ma prawidłowe bieżący czas uniksowy.
  • Automatyczne wykrywanie strefy czasowej: sprawdza, czy urządzenie ma prawidłowe bieżącej strefy czasowej.

Automatyczne wykrywanie czasu

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

Usługa time_detector

time_detector usługa, dostępna na urządzeniach z Androidem 10 lub nowszym, zarządza automatycznym czasem . W razie potrzeby dostosowuje bieżący czas Unixa na urządzeniu, gdy włączona jest automatyczna funkcja wykrywania czasu.

Usługa time_detector ma zawsze jeden z 2 stanów: nieokreślony lub pewne. Określono określony lub niepewny stan usługi według sugestii dotyczących czasu otrzymywanych z różnych źródeł.

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

Gdy wartość time_detector ma określone wartości, nie zastępuje bieżącej godziny. Stan niepewny zwykle oznacza, że usługa time_detector nie otrzymała sugestii dotyczących czasu. Usługa time_detector również stanie się niepewna, jeśli sugestie odebrane są uznawane za zbyt stare, aby można ich było użyć. Wiek sugestii to wziąć pod uwagę, ponieważ korekty korzystające ze starych sugestii czasu uniksowego w oparciu o na urządzeniu, które upłynęło w czasie rzeczywistym, co zakłada się, że są niedokładne przez długi czas.

Aby automatycznie ustalić bieżący czas Unixa, urządzenie może korzystać z różnych źródeł. W tym dokumencie nazywamy je ź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 najnowszą sugestię utworzoną 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 Unix epoch. Usługa time_detector ponownie ocenia nowe i dotychczasowe sugestie oraz aktualizuje stan urządzenia po otrzymaniu sugestii.

Chociaż czas UTC jest uzgodniony na całym świecie, z różnych powodów ustalenie bieżącego czasu ery Unixa nie zawsze jest proste w przypadku urządzenia z Androidem:

  • Czas epoki uniksowej to system pomiaru czasu nieco inny niż czas UTC. Przekształcanie czasu UTC w czas lokalny wymaga znajomości tego, kiedy występują sekundy przesunięte i jak są one obsługiwane przez źródła.
  • Źródła mogą być dostępne tylko o określonych porach lub w określonych okoliczności. Jeśli na przykład punkt początkowy wymaga połączenia sieciowego, może być dostępna tylko wtedy, gdy urządzenie jest połączone z internetem.
  • Źródła mogą być niedokładne lub niedokładne albo zawierać błędy. Dla: Na przykład: jeśli stacja bazowa telefonii komórkowej nie śledzi „czasu uniwersalnego”, źródło połączeń telefonicznych może podawać nieprawidłowe sugestie.
  • Podczas pobierania czasu uniksowego mogą występować nieścisłości. Na przykład opóźnienie w sieci, buforowanie czy planowanie procesu lub niedokładny czas uniksowy.
  • Zegar referencyjny używany do korygowania sugestii dotyczącej czasu, który upłynął od otrzymana sugestia może być niepoprawna.

Domyślnie są skonfigurowane do użycia 2 główne źródła wykrywania czasu Data dostawy:

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

Zarówno źródła telefoniczne, jak i źródłowe wymagają połączenia 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życia:

  • GNSS: korzysta z dostawcy lokalizacji GPS do pobierania czasu ze źródła GNSS.
  • Zewnętrzne: ogólne które pozwala producentom urządzeń zintegrować własne źródło Czas uniksowy.

Ustawienia czasu

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

Automatyczne wykrywanie czasu w Ustawieniach

Rysunek 1. Automatyczne wykrywanie czasu w Ustawieniach.

W tej tabeli opisano elementy sterujące dla użytkowników dotyczące wykrywania czasu w AOSP Ustawienia.

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

Lokalizacja ustawień AOSP Nazwa ustawień AOSP Zakres Działanie
System > Data i godzina Automatyczne ustawianie godziny* Wszyscy użytkownicy

Przełącznik.

Gdy jest włączone, urządzenie odpowiada za wykrywanie bieżącego systemu Unix w czasie epoki. Gdy opcja jest wyłączona, użytkownicy mogą ręcznie ustawiać czas na urządzeniu.

Gdy użytkownik wpisuje godzinę ręcznie, podaje czas lokalny, a nie czas uniksowy. obecnie się znajdujesz. Aktualny czas uniksowy jest obliczany na podstawie bieżącej strefy czasowej, aby uzyskać czas uniksowy.

Konfiguracja

Producenci urządzeń mogą konfigurować usługę time_detector na różne sposoby, np. które źródła powinny być używane i jak nadać priorytet sygnałom z nich.

Określanie priorytetów punktu początkowego

Po Androidzie 12 producenci urządzeń mogą zmieniać core/res/res/values/config.xmlplik konfiguracji, aby określić godzinę źródeł, które mają być uwzględniane w automatycznym wykrywaniu czasu, oraz priorytet, time_detector uwzględnia te źródła.

W przypadku urządzeń z Androidem 11 lub starszym priorytet pochodzenia jest zakodowany na ["telephony", "network"], co oznacza, że sugestie dotyczące połączeń telefonicznych mają wyższy priorytet niż sugestie dotyczące sieci.

Domyślna konfiguracja AOSP:

<!-- Specifies priority of automatic time sources. Suggestions from higher entries in the list
     take precedence over lower ones.
     See com.android.server.timedetector.TimeDetectorStrategy for available sources. -->
<string-array name="config_autoTimeSourcesPriority">
    <item>network</item>
    <item>telephony</item>
</string-array>

W Androidzie 12 sugestie dotyczące sieci i telefonów są skonfigurowane jako źródło, które ma być domyślnie używane. Propozycje dotyczące czasu sieci mają wyższy priorytet niż propozycje dotyczące czasu telefonicznego. Producenci urządzeń mogą się zmieniać kolejność źródeł przywracanych do działania w Androidzie 11 lub starszym, w których to połączenie telefoniczne ma wyższy priorytet.

Domyślnie, jeśli poprawna sugestia o najwyższym priorytecie pasuje do bieżący zegar systemowy z dokładnością do kilku sekund, czas urządzenia nie można zmienić. Pozwala to uniknąć tworzenia zadań w zainstalowanych aplikacjach, które słuchają Intencja ACTION_TIME_CHANGED.

Dozwolone wartości źródła:

Dozwolone przedziały czasowe

W Androidzie 14 wprowadzamy górne ograniczenie czasu sugestie otrzymane przez usługę time_detector. Jeśli urządzenie obsługuje w przypadku 32-bitowych procesów, platforma wyznacza górną granicę czasu, aby uniemożliwić urządzeniu na podstawie sugestii terminu, która może wywołać problem Y2038.

Android 12 wprowadził krótszy limit czasu, który służy do sprawdzania poprawności sugestii dotyczącej czasu otrzymanej przez usługę time_detector. Niższa wartość ograniczająca czas używana do automatycznych sugestii jest ustawiana na podstawie sygnatury czasowej kompilacji. Działa to zgodnie z zasadą, że prawidłowy czas nie może przypadać przed gdy został utworzony obraz systemu. Jeśli sugerowany czas jest krótszy niż dolny limit czasu, usługa time_detector odrzuca tę sugestię, ponieważ nie może być ona prawidłowa, jeśli sygnatura czasowa kompilacji jest poprawna.

W przypadku urządzeń z Androidem w wersji 11 lub starszej usługa time_detector nie weryfikuje przychodzących sugestii dotyczących czasu Unixa.

Debugowanie i testowanie czasu

Z tej sekcji dowiesz się, jak debugować i testować zachowanie usługi time_detector oraz innych komponentów udostępnianych przez wszystkie źródła.

Interakcja z usługą time_detector

Aby wyświetlić konfigurację i stan usługi time_detector 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 zawierają też opis właściwości usługi device_config, których można użyć wpływa na działanie time_detector w testach lub w środowisku produkcyjnym. Szczegółowe informacje znajdziesz w artykule Konfigurowanie urządzenia za pomocą usługi device_config.

Aby sprawdzać automatyczne wykrywanie czasu, testerzy muszą wiedzieć, które źródła Korzysta z time_detector usługi. Poniżej znajdziesz przykład danych wyjściowych polecenia adb shell cmd time_detector dump, w których pogrubioną czcionką zaznaczono informacje 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 te można interpretować w ten sposób:

Klucz Wartość
mEnvironment.isAutoTimeDetectionEnabled() Określa, czy automatyczne wykrywanie czasu jest włączone.
mEnvironment.autoTimeLowerBound() Bieżąca dolna granica używana do weryfikacji sugestii dotyczących czasu.
mEnvironment.autoOriginPriorities() Używane źródła i ich kolejność priorytetów.

Dziennik zmian czasu wskazuje, kiedy usługa time_detector zmieniła bieżący czas uniksowy urządzenia.

Historia sugestii wskazuje, które sugestie zostały przesłane przez użytkownika dla każdego punktu początkowego.

Automatyczne wykrywanie strefy czasowej

W tej sekcji znajdziesz omówienie usługi time_zone_detector, która zarządza automatycznym wykrywaniem strefy czasowej, kontrolkami użytkownika w ustawieniach, wykrywaniem strefy czasowej na podstawie lokalizacji i telefonu oraz szczegółami testów.

Usługa time_zone_detector

time_zone_detector usługa, dostępna na urządzeniach z Androidem 11 lub nowszym, zarządza automatycznym czasem wykrywanie strefy. Dostosuje aktualną strefę czasową urządzenia, gdy automatyczne wykrywanie strefy czasowej jest włączone.

Gdy automatyczne wykrywanie strefy czasowej jest włączone, time_zone_detector może być w jeden z 2 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 istotne informacje o strefie czasowej, które może spowodować zastąpienie obecnej strefy czasowej. Jeśli nie ma pewności, oznacza to, że nie otrzymało żadnych informacji lub że informacje są obarczone niskim poziomem ufności, co oznacza, że nie zastąpi to bieżącego czasu lokalnego.

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

  • W przypadku, gdy urządzenie znajduje się w miejscu bez strefy czasowej, np. na wodach międzynarodowych lub w strefie spornej, wprowadzany jest stan z zerową strefą czasową. Ten stan jest podobny do stanu niepewnego, ale wskazuje że time_zone_detector nie musi podejmować żadnych działań, aby spróbować określić strefę czasową.
  • Wprowadzany jest określony stan z wieloma strefami czasowymi tam, gdzie występuje niejednoznaczności lub warunków granicy. W tym stanie, jeśli bieżąca strefa czasowa jest jedną z tych, co do których time_zone_detector jest pewna, bieżąca strefa czasowa pozostaje bez zmian. W przeciwnym razie używana jest jedna z dostępnych stref czasowych. Dzięki temu time_zone_detector staje się elementem regularności jeśli użytkownik wcześniej ręcznie wybrał strefę czasową lub zbliża się do granicy.

Pewny lub niepewny stan usługi time_zone_detector jest określany przez sugestie dotyczące strefy czasowej wysyłane przez algorytm.

Zasadniczo sugestie dzielą się na 2 typy, które ściśle odpowiadają możliwym stanom time_zone_detector: pewny i niepewny. Oto przykłady typów sugestii:

  • type = uncertain, zoneIds = []

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

    • Algorytm ma pewność, że strefa to Europa/Londyn.
  • type = certain, zoneIds = []`

    • Algorytm jest pewien, ale nie ma powiązanego identyfikatora strefy z bieżącą lokalizacją.
  • typ = certain, zoneIds = ["America/Denver", "America/Phoenix"]

    • Algorytm jest pewien, że odpowiedź to jedna z tych 2 stref, ale nie może wybrać „America/Denver” ani „America/Phoenix”.

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

Usługa time_zone_detector jest stanowa, co oznacza, że przechowuje zapis najnowsze sugestie poszczególnych algorytmów. Wysłano nowe sugestie do usługi time_zone_detector, jeśli poprzednia sugestia nie jest już prawidłowo; to znaczy, czy algorytm ma teraz inną sugestię utraciły 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 do określania strefy czasowej używa jednego algorytmu. Jeśli algorytm lokalizacji jest obsługiwany na urządzeniu, algorytm używany przez urządzenie jest określany na podstawie ustawień strefy czasowej skonfigurowanych przez użytkownika. Gdy używany algorytm stanie się niepewny co do strefy czasowej, time_zone_detector zwykle nie korzysta z sugestii z innego algorytmu. Sugestie powiązane z nieużywanymi algorytmami mogą być w pamięci time_zone_detector, ale nie są używane, chyba że algorytm zmian. Gdy użytkownik zmieni ustawienia automatycznego wykrywania strefy czasowej a zmienia się algorytm, najnowsza sugestia dostępna dla zastosowany nowy algorytm.

Więcej informacji o sytuacji, w której do określenia strefy czasowej używa się kilku algorytmów, znajdziesz w artykule Tryb awaryjny telefonii.

Tryb zastępczy telefonu

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

Tryb zastępczego połączenia telefonicznego dotyczy urządzeń, na których można korzystać zarówno z usług telefonicznych, jak i lokalizacyjnych wykrywanie jest obsługiwane, a użytkownik włączył opcję Użyj lokalizacji, aby ustawić strefy czasowej w ustawieniach strefy czasowej. Tryb ten jest włączany automatycznie po ponownym uruchomieniu urządzenia i wyłączeniu trybu samolotowego.

W Androidzie 14 i nowszych, zastępcza sieć telefoniczna może być uruchomione przez interfejsy API do raportowania stanu LTZP, oznacza to, że jeśli sieć LTZP zgłosi, że jest niepewna, oraz jej zdolność do wykrycia lokalizacji lub strefa czasowa zostanie pogorszona przez środowisko, tryb zastępczy połączeń telefonicznych jest .

W trybie awaryjnym telefonii usługa time_zone_detector korzysta z sugestii telefonii, tak jakby wykrywanie lokalizacji było wyłączone do czasu, aż algorytm lokalizacji przedstawi odpowiednią sugestię. Po otrzymaniu określonej sugestii system telefoniczny tryb zastępczy jest wyłączony i używane są tylko 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 ustawień AOSP.

Automatyczne wykrywanie strefy czasowej w Ustawieniach

Rysunek 2. Automatyczne wykrywanie strefy czasowej w Ustawieniach.

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

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

Lokalizacja ustawień AOSP Nazwa ustawień AOSP Zakres Działanie
System > Data i godzina Automatyczne ustawianie strefy czasowej* Wszyscy użytkownicy

Przełącznik.

Gdy opcja jest włączona, urządzenie odpowiada za wykrywanie bieżącej strefy czasowej. Gdy ta opcja jest wyłączona, użytkownicy mogą skonfigurować ustawienia ręcznie ustaw strefę czasową.

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

Przełącznik.

Funkcja dostępna na Androidzie 12. Ten przełącznik jest jest wyświetlane tylko wtedy, gdy urządzenie obsługuje wykrywanie strefy czasowej lokalizacji.

Informacje o zmianach wprowadzonych w Androidzie 14 znajdziesz w Urządzenia obsługujące tylko wykrywanie strefy czasowej lokalizacji.

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

przełącznik;

Umożliwia lub uniemożliwia korzystanie z lokalizacji urządzenia. Wartość jest istotna, jeśli wykrywanie strefy czasowej lokalizacji jest obsługiwane na urządzeniu.

Poniżej znajdziesz omówienie działania urządzeń w określonej strefie czasowej wykrywanie na podstawie ustawień wybranych przez użytkownika:

  • [Data i godzina] Ustaw strefę czasową automatycznie: WYŁ.

    • Użytkownik musi ręcznie wybrać strefę czasową.
  • [Data i godzina] Automatyczne ustawianie strefy czasowej: WŁĄCZONE

    • [Lokalizacja] Używaj lokalizacji: WYŁ.

      • Sygnały telefoniczne są używane do wykrywania strefy czasowej.
    • [Lokalizacja] Użyj lokalizacji: WŁĄCZONE

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

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

        • Do wykrywania czasu używane są sygnały telefoniczne strefie.
.

Urządzenia wielu użytkowników

Ponieważ wiele z tych ustawień jest ograniczonych do bieżącego użytkownika, zachowanie wykrywania strefy czasowej urządzenia może się zmienić, gdy zmieni się bieżący użytkownik na urządzeniu z Androidem, na którym korzysta więcej osób.

Przełącznik Użyj lokalizacji do ustawienia strefy czasowej jest ograniczony do bieżącego użytkownika i nie jest ograniczony przez zasady urządzenia, co oznacza, że użytkownicy mogą zawsze zmienić jego wartość, nawet jeśli przełącznik Ustaw strefę czasową automatycznie jest wyłączony lub jeśli inne ustawienia czasu lub strefy czasowej są ograniczone przez kontroler zasad urządzenia.

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

W tej sekcji opisano działanie na urządzeniach, które obsługują tylko algorytm lokalizacji.

  • Android 14 lub nowszy

    • Opcja Użyj lokalizacji nie jest wyświetlana użytkownikom w aplikacji ustawień AOSP, a urządzenie zachowuje się tak, jakby opcja Użyj lokalizacji była włączona.
    • Wartość ustawienia SettingsProvider na poziomie użytkownika jest ignorowana.location_time_zone_detection_enabled Ta wartość rejestruje preferencje użytkownika na innych typach urządzeń.
  • Android 12 lub Android 13

    • Opcja Użyj lokalizacji jest widoczna dla użytkowników w aplikacji Ustawienia AOSP oraz użytkownicy mogą wyłączyć tę opcję. Jeśli opcja jest wyłączona, urządzenie nie wykryje automatycznie strefy czasowej.

Zachowanie podczas przełączania się między automatycznym wykrywaniem

Gdy użytkownik przełączy wykrywanie strefy czasowej z ręcznego na automatyczne, time_zone_detector może już mieć pewność co do bieżącej strefy czasowej. Jeśli tak, to gdy użytkownik włączy automatyczne wykrywanie, strefa czasowa urządzenia może zostać zmieniona w tym samym czasie, aby pasowała do opinii usługi time_zone_detector.

Podobnie, gdy użytkownik wprowadzi zmianę w Ustawieniach, która powoduje zmianę bieżącego algorytmu usługi time_zone_detector, usługa time_zone_detector może już otrzymać sugestie dotyczące nowego algorytmu, a czas na urządzeniu może zostać natychmiast zmieniony zgodnie z opinią usługi time_zone_detector.

Wykrywanie strefy czasowej w telefonach

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

Wykrywanie strefy czasowej lokalizacji

Wykrywanie strefy czasowej lokalizacji jest dostępne na Androidzie 12 lub wyższą. Jest to opcjonalna funkcja automatycznego wykrywania strefy czasowej, która umożliwia urządzeniom określanie bieżącej strefy czasowej na podstawie lokalizacji.

Usługa location_time_zone_manager, wprowadzona w Android 12 działa w serwera systemu i zawiera kod odpowiedzialny za przesyłanie lokalizacji. sugestie algorytmu do usługi time_zone_detector. Więcej informacji: Wykrywanie strefy czasowej lokalizacji.

Ważne kwestie dotyczące wdrażania funkcji

W tej sekcji opisano aspekty funkcji wykrywania strefy czasowej lokalizacji, które pomaga producentowi urządzenia zdecydować, czy warto wdrożyć tę funkcję na urządzeniu.

Porównanie wykrywania lokalizacji i telefonii

Tabela poniżej zawiera porównanie zalet i wad funkcji za pomocą lokalizacji zamiast sygnałów telefonicznych do wykrywania strefy czasowej.

Wykrywanie przez telefon Wykrywanie lokalizacji
Poprawność To zależy od kraju.

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

Poprawność zazwyczaj różni się w zależności od:
  • Dokładność i regularność dostawcy danych o lokalizacji.
  • Jakość danych mapy strefy czasowej.
Możliwość aktualizacji Wykrywanie połączeń telefonicznych zależy od plików zawartych w aktualizowanym ustawieniu Moduł Zone Data (com.android.tzdata APEX). Zależy od konfiguracji funkcji lub komponentów wtyczek.

Możliwość aktualizacji zwykle zależy od tego, czy urządzenie używa serwera czy klienta danych mapy strefy czasowej.

Uwaga: dane mapy strefy czasowej nie są zawarte w kolumnie Czas Moduł danych stref używany do aktualizowania kopii TZDB na Androidzie i innych okresów oraz informacje o strefie.

Producenci urządzeń muszą też zadbać o to, aby wersje reguł stref czasowych i danych mapy stref czasowych były spójne.
Zużycie energii Brak lub niewielkie zużycie energii Zależy od ustawień lokalizacji użytkownika, używanych wtyczek i zwykle jakie inne aplikacje proszą o lokalizację.
Dostępność Tylko urządzenia telefoniczne. Zwykle wymaga sprawnej 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 położenia geograficznego lokalizacji. Lokalizacja jest danymi wrażliwymi. Użytkownicy mogą niepokoić się wiedzę o ich lokalizacji w ramach wykrywania strefy czasowej. Bez względu na wykrywanie strefy czasowej wszystkie aplikacje uruchomione na urządzeniu mogą odczytywać aktualnej strefy czasowej urządzenia bez konieczności uprawnień Androida; aplikacje mogą wywnioskować na podstawie tych informacji nieprecyzyjne informacje o lokalizacji urządzenia.

Mówiąc dokładniej, wykrywanie strefy czasowej może działać jako pasywne lub aktywne. oznacza:

  • Pasywny: coś w środowisku urządzenia informuje urządzenie strefy czasowej, która ma być używana w danym środowisku.
  • Aktywne: urządzenie musi samodzielnie ustalić strefę czasową i w zależności od użytkownika ustawień prywatności i zgody tej osoby, uzyska lokalizację urządzenia. Następnie może udostępnić swoją lokalizację osobom z zewnątrz usług Google. Szczegółowe informacje na temat prywatności i zgody użytkowników znajdziesz w dyskusji poniżej.

Wykrywanie pasywne, np. algorytm telefoniczny, nie ma żadnych dodatkowych na prywatność użytkowników.

Wykrywanie aktywne, np. za pomocą algorytmu lokalizacji, obejmuje określenie lokalizacja urządzenia, na którą użytkownicy mogą nie wyrazić zgody, oraz lokalizacja mogą być wysyłane przez sieć w celu określenia identyfikatora strefy czasowej.

Podejście Androida do prywatności użytkownika w zakresie wykrywania strefy czasowej daje użytkownikowi możliwość indywidualnego wyłączania algorytmów, które powinny być aktywne. Poza tym kod platformy AOSP nie zajmuje się bezpośrednio samą lokalizacją: wykrywanie lokalizacji i mapowanie lokalizacji na identyfikatory stref czasowych pozostaje do wtyczki skonfigurowanych przez producentów urządzeń.

Aby dowiedzieć się więcej o funkcjach ochrony prywatności użytkowników, zobacz Strefa czasowa lokalizacji Wykrywanie.

Konfiguracja

Producenci urządzeń mogą skonfigurować usługę time_zone_detector, aby zmienić jej działanie. W tej sekcji opisano opcje konfiguracji dotyczące ogólnego zachowania usługi time_zone_detector. Szczegółowe informacje o konfiguracji algorytmów wykrywania strefy czasowej i telefonii znajdziesz w artykułach Wykrywanie strefy czasowej przez telefonyWykrywanie strefy czasowej przez lokalizację.

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

Klucz konfiguracji Wartość AOSP Opis
config_supportTelephonyTimeZoneFallback true Gdy true, time_zone_detector używa trybu awaryjnego telefonicznego. Ta funkcja jest dostępna na urządzeniach z Androidem 13 lub nowszym.

Zmienianie 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ść parametru def_auto_time_zone zdefiniowanego w polu frameworks/base/packages/SettingsProvider/res/values/defaults.xml na false.

Podczas przywracania kopii zapasowej z innego urządzenia framework domyślnie aktualizuje wartość ustawienia auto_time_zone. Jeśli chcesz mieć pewność, że nie zostanie przywrócone z kopii zapasowej, uwzględnij auto_time_zone w Tablica restore_blocked_global_settings zdefiniowana w frameworks/base/packages/SettingsProvider/res/values/blocked_settings.xml

Debugowanie i testowanie strefy czasowej

W tej sekcji znajdziesz informacje o tym, jak debugować i testować zachowanie usługi time_zone_detector i innych komponentów, które są wspólne dla wszystkich algorytmów.

Konfigurowanie urządzenia przy użyciu usługi device_config

Usługa device_config to mechanizm używany na Androidzie do konfigurowania zmiennego zachowania za pomocą wartości, które są zwykle pobierane z serwera zdalnego przez kod zastrzeżony (niebędący częścią AOSP). Gdy do testowania używasz wartości device_config, szczególnie podczas długich testów ręcznych, urządzenie może zsynchronizować flagi, co spowoduje ich zresetowanie i wyczyszczenie wartości ustawionych na potrzeby testowania.

Aby tymczasowo zablokować synchronizację flagi na Androidzie 12 lub nowszym, użyj:

adb shell cmd device_config set_sync_disabled_for_tests persistent

Aby przywrócić synchronizację flag po zakończeniu testów, użyj tych poleceń:

adb shell cmd device_config set_sync_disabled_for_tests none

Po przywróceniu synchronizacji flag zrestartuj urządzenie.

Więcej informacji znajdziesz w artykule $ adb shell cmd device_config help.

Interakcja z usługą time_zone_detector

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

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

Wyjście pomocy zawiera też opis właściwości usługi device_config, których można używać do wpływania na zachowanie usługi time_zone_detector podczas testowania lub w wersji produkcyjnej. Szczegółowe informacje znajdziesz w artykule Konfigurowanie urządzenia za pomocą usługi device_config.

Aby sprawdzać wykrywanie strefy czasowej, testerzy muszą wiedzieć, który algorytm Aplikacja time_zone_detector używa. Aby poznać obecny algorytm time_zone_detector i wpływać na niego, użyj jednej z tych opcji:

  • Sprawdź to za pomocą interfejsu ustawień. Więcej informacji: Ustawienia strefy czasowej
  • Użyj wiersza poleceń za pomocą adb:

    • Aby skopiować 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. Więcej informacji znajdziesz w artykule adb shell cmd time_zone_detector help.

Poniżej znajdziesz przykładowe dane wyjściowe polecenia adb shell cmd time_zone_detector dump z informacjami o bieżącej algorytm i stan usługi pogrubione:

$ 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 przez Kontroler zasad dotyczących urządzeń.
mTelephonyDetectionSupported Określa, czy urządzenie obsługuje wykrywanie strefy czasowej w telefonii.
mGeoDetectionSupported Określa, czy urządzenie obsługuje wykrywanie strefy czasowej lokalizacji. Jest to skuteczny stan oparty na konfiguracji oraz obecności co najmniej jednego przełącznika LTZP.
mAutoDetectionEnabled Określa, czy automatyczne wykrywanie strefy czasowej jest włączone.
mLocationEnabled Przełącznik głównej lokalizacji.
mGeoDetectionEnabled Przełącznik algorytmu: false wskazuje algorytm telefonii, a true – algorytm lokalizacji.

Historia sugestii wskazuje, jakie sugestie zostały przesłane za pomocą Ustawień (ręcznego) oraz algorytmów telefonii i lokalizacji.