Przegląd czasu

Na tej stronie opisano, jak działa wykrywanie czasu i strefy czasowej na urządzeniach z Androidem. Obejmuje to sposób, w jaki Android automatycznie wykrywa godzinę i strefy czasowe, opcje konfiguracji dla producentów urządzeń oraz informacje o testowaniu.

Omówienie czasu i stref czasowych

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

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

Aktualny czas Unixa i aktualna strefa czasowa są stanami dotyczącymi całego urządzenia, co oznacza, że są współdzielone przez wszystkich jego użytkowników.

Obecny czas uniksowy nie jest stałą wartością. Jest on aktualizowany automatycznie, aby odzwierciedlać upływ czasu. Oprócz normalnego upływu czasu bieżący czas Unixa urządzenia jest dostosowywany, jeśli okaże się nieprawidłowy, na przykład po wyłączeniu zasilania.

Bieżąca strefa czasowa określa korektę, którą należy wprowadzić, aby przekonwertować bieżący czas uniksowy na czas lokalny. Na przykład w lecie w Los Angeles urządzenie odejmuje 7 godzin od obecnego czasu uniksowego, a zimą odejmuje 8 godzin.

Aby można było obliczać czas lokalny, wszystkie urządzenia z Androidem mają bazę danych zawierającą wszystkie globalne reguły strefy czasowej. Więcej informacji o regułach stref czasowych znajdziesz w artykule Reguły stref czasowych.

Gdy użytkownik podróżuje do nowego miejsca, w którym obowiązuje inna strefa czasowa, bieżący czas Unixa nie musi być dostosowywany, ale użytkownik zazwyczaj chce widzieć czas lokalny, a nie czas z poprzedniej lokalizacji. Zmiana bieżącej strefy czasowej daje pewność, że do bieżącego czasu uniksowego zostanie zastosowane odpowiednie przesunięcie, aby wyświetlać prawidłowy czas lokalny dla nowej lokalizacji.

Dzięki AOSP użytkownicy mogą samodzielnie kontrolować, czy godzina i strefa czasowa mają być ustawiane automatycznie. Służą do tego opisane poniżej mechanizmy.

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

Automatyczne wykrywanie czasu

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

Usługa time_detector

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

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

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

Jeśli time_detector jest niepewne, nie zastępuje bieżącej godziny. Niepewny stan oznacza zazwyczaj, że usługa time_detector nie otrzymała sugestii dotyczących czasu. Usługa time_detector staje się niepewna, jeśli otrzymane przez nią sugestie są zbyt stare, aby można było ich użyć. Uwzględnia się wiek sugestii, ponieważ dostosowania oparte na starych sugestiach czasu uniksowego w epoce Unixa korzystają z czasu upływającego w czasie rzeczywistym na urządzeniu, który po dłuższym czasie może być niedokładny.

Aby automatycznie określić bieżący czas uniksowy, urządzenie ma różne źródła. W tym dokumencie są to tzw. origins. 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 najnowsze sugestie poszczególnych źródeł. 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 określenie bieżącego czasu uniksowego nie zawsze jest proste w przypadku urządzenia z Androidem:

  • Czas uniksowy to nieco inny system pomiaru czasu niż czas UTC. Przekształcanie czasu w jednym systemie na czas w drugim wymaga znajomości momentu wystąpienia sekund nadliczeniowych oraz sposobu ich obsługi przez źródła.
  • Początki mogą być dostępne tylko w określonych momentach lub w określonych okolicznościach. Jeśli na przykład źródło wymaga połączenia z internetem, może być dostępne tylko wtedy, gdy urządzenie jest połączone z internetem.
  • Źródła mogą być niedokładne lub zawierać błędy. Jeśli na przykład stacja telefonii komórkowej nie śledzi poprawnie „czasu uniwersalnego”, źródło usług telefonicznych może podawać niedokładne sugestie czasu.
  • Podczas uzyskiwania czasu epoki uniksowej mogą wystąpić niedokładności. Na przykład opóźnienie w sieci, buforowanie lub harmonogramowanie procesów mogą spowodować, że czas ery Unixa będzie niedokładny.
  • Zegar odniesienia używany do dostosowania sugestii do upływu czasu od momentu otrzymania sugestii może być niedokładny.

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

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

Zarówno źródła telefoniczne, jak i pochodzące z sieci wymagają połączenia z sieciami zewnętrznymi, które nie zawsze są dostępne.

Od Androida 12 Android obsługuje też te źródła, które nie są domyślnie skonfigurowane do użycia:

  • GNSS: używa dostawcy lokalizacji GPS, aby uzyskać czas ze źródła GNSS.
  • Zewnętrzne: ogólne źródło, które pozwala producentom urządzeń zintegrować własne źródło czasu epoki uniksowej.

Ustawienia czasu

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

Automatyczne wykrywanie czasu w Ustawieniach

Rysunek 1. Automatyczne wykrywanie czasu w Ustawieniach.

W tabeli poniżej opisano ustawienia użytkownika dotyczące wykrywania czasu w aplikacji Ustawienia AOSP.

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

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

przełącznik;

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

Gdy użytkownik podaje czas ręcznie, wpisze swój czas lokalny, a nie czas Unixa. Aktualny czas uniksowy jest obliczany na podstawie bieżącej strefy czasowej, aby uzyskać czas uniksowy.

Konfiguracja

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

Priorytety punktów początkowych

Począwszy od Androida 12 producenci urządzeń mogą zmienić plik konfiguracji core/res/res/values/config.xml, aby określić, który początek ma być uwzględniany w automatycznym wykrywaniu czasu oraz jaki priorytet ma time_detector uwzględniać te źródła.

W przypadku urządzeń z Androidem 11 lub starszym priorytet źródła jest na stałe 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 połączeń telefonicznych są skonfigurowane jako źródła i używane domyślnie. Sugestie dotyczące czasu korzystania z sieci mają wyższy priorytet niż sugestie związane z połączeniem telefonicznym. Producenci urządzeń mogą zmienić kolejność źródeł, aby przywrócić działanie Androida w wersji 11 lub starszej, gdzie wyższy priorytet mają usługi telefoniczne.

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

Dozwolone wartości punktu początkowego to:

Dozwolone granice czasu

Android 14 wprowadza górne ograniczenie czasowe sugestii dotyczących czasu otrzymywanych przez usługę time_detector. Jeśli urządzenie obsługuje procesy 32-bitowe, platforma ustawia górną granicę czasu, aby zapobiec używaniu przez urządzenie sugestii czasu, która mogłaby wywołać problem z rokiem 2038.

Android 12 wprowadził krótszy limit czasu, który służy do sprawdzania poprawności sugestii czasu otrzymanej przez usługę time_detector. Dolna wartość limitu czasu używana w przypadku automatycznych sugestii jest określana na podstawie sygnatury czasowej kompilacji. Działa to zgodnie z założeniem, że prawidłowy czas nie może przypadać przed utworzeniem obrazu systemu urządzenia. Jeśli sugestia dotycząca czasu przypada przed dolną granicą czasu, usługa time_detector ją odrzuca, ponieważ nie może być prawidłowa, jeśli sygnatura czasowa kompilacji jest prawidłowa.

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

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 usługitime_detector, użyj:

adb shell cmd time_detector dump

Aby zobaczyć dodatkowe polecenia do debugowania i testowania wykrywania strefy czasowej, wpisz:

adb shell cmd time_detector help

Wyjście pomocy zawiera też opis właściwości usługi device_config, które można wykorzystać do wpływania na działanie usługi time_detector w wersji testowej lub produkcyjnej. Szczegółowe informacje znajdziesz w sekcji Konfigurowanie urządzenia przy użyciu usługi device_config.

Aby sprawdzać automatyczne wykrywanie czasu, testerzy muszą wiedzieć, z jakich źródeł korzysta usługa time_detector. Poniżej znajdziesz przykład danych wyjściowych polecenia adb shell cmd time_detector dump, 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.

Historia zmian czasu wskazuje przypadki, w których usługa time_detector zmieniła bieżący czas uniksowy urządzenia.

Historia sugestii wskazuje, jakie sugestie zostały przesłane przez poszczególne źródła.

Automatyczne wykrywanie strefy czasowej

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

Usługa time_zone_detector

Usługa time_zone_detector, dostępna na urządzeniach z Androidem 11 lub nowszym, zarządza automatycznym wykrywaniem strefy czasowej. W przypadku włączonego automatycznego wykrywania strefy czasowej dostosowuje bieżącą strefę czasową urządzenia.

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

Gdy usługa time_zone_detector jest w określonym stanie, oznacza to, że usługa time_zone_detector otrzymała 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 ono 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. Oto następujące stany:

  • Określony stan z zerową strefą czasową jest wprowadzany, gdy urządzenie znajduje się w miejscu, w którym nie ma strefy czasowej, np. na wodach międzynarodowych lub na spornym obszarze. Ten stan jest podobny do stanu niepewnego, ale wskazuje, że time_zone_detector nie musi podejmować dalszych działań w celu określenia strefy czasowej.
  • Wprowadzany jest określony stan z wieloma strefami czasowymi, w którym występują niejasności lub warunki graniczne. Jeśli bieżąca strefa czasowa jest w tym stanie, jeśli bieżąca strefa czasowa jest wskazana przez funkcję time_zone_detector, 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 zachowuje element przyklejenia, gdy użytkownik wcześniej ręcznie wybrał strefę czasową lub gdy urządzenie zbliża się do granicy.

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

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

  • type = uncertain, zoneIds = []

    • Algorytm nie zna strefy czasowej.
  • typ = certain, zoneIds = ["Europe/London"]

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

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

    • Algorytm ma pewność, że odpowiedzią jest jedna z dwóch stref, ale nie może wybrać między „Ameryką/Denver” a „Amerykanią/Phoenixem”.

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

Usługa time_zone_detector jest stanowa, co oznacza, że zapisuje najnowsze sugestie poszczególnych algorytmów. Nowe sugestie są wysyłane do usługi time_zone_detector, jeśli poprzednia sugestia jest już niepoprawna, czyli jeśli algorytm ma teraz inną sugestię lub nie mógł wykryć strefy czasowej. Usługa time_zone_detector ponownie sprawdza nowe i dotychczasowe sugestie oraz aktualizuje stan urządzenia po ich otrzymaniu.

Android obsługuje 2 algorytmy wykrywania strefy czasowej:

  • Połączenia telefoniczne
  • Lokalizacja

Usługa time_zone_detector zwykle określa strefę czasową za pomocą 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 ma wątpliwości co do strefy czasowej, time_zone_detector zwykle nie korzysta z sugestii z innego algorytmu. Propozycje powiązane z nieużywanymi algorytmami mogą być przechowywane w pamięci przez time_zone_detector, ale nie są używane, chyba że algorytm ulegnie zmianie. Gdy użytkownik zmieni ustawienia automatycznego wykrywania strefy czasowej i zmieni się algorytm, zostanie użyta najnowsza sugestia dostępna dla nowego algorytmu.

Szczegółowe informacje o sytuacji, gdy do określenia strefy czasowej jest używanych kilka algorytmów, znajdziesz w artykule o trybie zastępczym połączeń telefonicznych.

Tryb zastępczy telefonu

Na urządzeniach z Androidem 13 lub nowszym usługa time_zone_detector obsługuje tryb awaryjny telefonii. Ten tryb umożliwia Androidowi tymczasowe korzystanie z sugestii wykrywania połączeń telefonicznych, gdy wykrywanie lokalizacji nie może wykryć strefy czasowej lub gdy wykrywanie lokalizacji zajmuje więcej czasu niż wykrywanie połączeń telefonicznych.

Tryb zastępczy telefonu ma zastosowanie do urządzeń, na których obsługiwane jest zarówno wykrywanie połączeń telefonicznych, jak i lokalizacji, a użytkownik włączył w sekcji Ustawienia strefy czasowej opcję Użyj lokalizacji, aby ustawić strefę czasową. Tryb jest włączany automatycznie po ponownym uruchomieniu urządzenia i wyłączeniu trybu samolotowego.

W Androidzie 14 i nowszych tryb awaryjny telefonii może zostać włączony za pomocą interfejsów API do raportowania stanu LTZP. Oznacza to, że jeśli LTZP zgłosi, że nie jest pewien, że jego zdolność do wykrywania lokalizacji lub strefy czasowej jest ograniczona przez środowisko, włącza tryb awaryjny telefonii.

W trybie awaryjnym telefonii usługa time_zone_detector używa sugestii telefonii, tak jakby wykrywanie lokalizacji było wyłączone do czasu, aż algorytm lokalizacji przedstawi odpowiednią sugestię. Po otrzymaniu określonej sugestii tryb zastępczy połączeń telefonicznych zostaje wyłączony i używane są wyłącznie sugestie dotyczące lokalizacji.

Szczegółowe informacje o konfiguracji trybu zastępczego telefonii znajdziesz w artykule Konfiguracja wykrywania strefy czasowej.

Ustawienia strefy czasowej

Użytkownicy mogą włączać i konfigurować ustawienia automatycznego wykrywania strefy czasowej w aplikacji Ustawienia AOSP.

Automatyczne wykrywanie strefy czasowej w Ustawieniach

Rysunek 2. Automatyczne wykrywanie strefy czasowej w Ustawieniach.

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

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

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

Przełącznik.

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

System > Data i godzina Ustawienie strefy czasowej za pomocą lokalizacji Bieżący użytkownik

Przełącznik.

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

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

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

Przełącznik.

Umożliwia lub uniemożliwia ogólne korzystanie z lokalizacji urządzenia. Ta wartość ma znaczenie, jeśli urządzenie obsługuje wykrywanie strefy czasowej lokalizacji.

Poniżej znajdziesz omówienie działania urządzenia w przypadku wykrywania strefy czasowej przy określonych ustawieniach wybranych przez użytkownika:

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

    • Użytkownik musi ręcznie wybrać strefę czasową.
  • [Data i godzina] Ustaw strefę czasową automatycznie: WŁ.

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

      • Sygnały telefoniczne są używane do wykrywania strefy czasowej.
    • [Lokalizacja] Użyj lokalizacji: włączona

      • [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 strefy czasowej służą sygnały telefoniczne.

Urządzenia wielu użytkowników

Kilka związanych z nim ustawień dotyczy bieżącego użytkownika, dlatego sposób wykrywania strefy czasowej na urządzeniu może się zmienić, gdy bieżący użytkownik zmieni urządzenie z Androidem, na którym jest wielu użytkowników.

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

 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 dotyczące innych typów urządzeń.
  • Android 12 lub Android 13

    • Opcja Użyj lokalizacji jest widoczna dla użytkowników w aplikacji ustawień AOSP i użytkownicy mogą ją wyłączyć. Jeśli ta opcja jest wyłączona, urządzenie nie wykrywa strefy czasowej automatycznie.

Zachowanie po zmianie na automatyczne wykrywanie i wyłączenie z niego

Gdy użytkownik przełączy wykrywanie strefy czasowej z ręcznego na automatyczne, time_zone_detector może już mieć pewność co do aktualnej strefy czasowej. Jeśli tak, gdy użytkownik włączy automatyczne wykrywanie, strefa czasowa urządzenia może się w tym samym czasie zmienić zgodnie z opinią usługi time_zone_detector.

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

Wykrywanie strefy czasowej w telefonii

Wykrywanie strefy czasowej w telefonach 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 i nowszych. Jest to opcjonalna funkcja automatycznego wykrywania strefy czasowej, która umożliwia urządzeniom określanie bieżącej strefy czasowej na podstawie lokalizacji.

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

Uwagi na temat wdrażania funkcji

W tej sekcji opisano aspekty funkcji wykrywania strefy czasowej lokalizacji, które pomagają producentowi urządzenia podjąć decyzję o wdrożeniu tej funkcji na urządzeniu.

Porównanie wykrywania lokalizacji i telefonii

Tabela poniżej zawiera porównanie zalet i wad używania lokalizacji zamiast sygnałów telefonicznych do wykrywania strefy czasowej.

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

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

Dokładność zależy zwykle od:
  • Dokładność i regularność dostawcy danych o lokalizacji.
  • Jakość danych mapy strefy czasowej.
Możliwość aktualizacji Wykrywanie połączeń telefonicznych opiera się na plikach zawartych w aktualizacyjnym module danych strefy czasowej (com.android.tzdata APEX). Zależy od konfiguracji funkcji lub komponentów wtyczek.

Możliwość aktualizacji zależy zwykle od tego, czy urządzenie korzysta z danych mapy stref czasowych po stronie serwera czy klienta.

Uwaga: dane mapy stref czasowych nie są zawarte w module Time Zone Data używanym do aktualizowania kopii TZDB na Androidzie i innych informacji o strefach czasowych.

Producenci urządzeń muszą też wziąć pod uwagę spójność wersji między regułami strefy czasowej a danymi mapy strefy czasowej.
Zużycie energii Brak lub niewielkie zużycie energii Zależy od ustawień lokalizacji użytkownika, używanych wtyczek i zwykle innych aplikacji, które proszą o lokalizację.
Dostępność tylko urządzenia telefoniczne. Zwykle wymaga to działającej karty SIM. Wykrywanie lokalizacji zależy od dostępnych dostawców lokalizacji.
Prywatność użytkowników

Preferowana strefa czasowa użytkownika jest zwykle określana na podstawie jego lokalizacji geograficznej. Lokalizacja to dane wrażliwe. Użytkownicy mogą się obawiać, że ich lokalizacja zostanie udostępniona w ramach wykrywania strefy czasowej. Wszystkie aplikacje uruchomione na urządzeniu mogą odczytywać bieżącą strefę czasową bez konieczności uzyskiwania uprawnień Androida, co nie jest związane z wykrywaniem strefy czasowej. Aplikacje te mogą też wywnioskować na podstawie tych informacji niedokładne informacje o lokalizacji urządzenia.

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

  • Pasywna: coś w otoczeniu urządzenia informuje urządzenie o strefie czasowej, której ma używać w danym środowisku.
  • Aktywna: urządzenie musi określić strefę czasową i w zależności od ustawień prywatności użytkowników oraz ich zgody uzyskać lokalizację urządzenia. Następnie może udostępnić swoją lokalizację usługom zewnętrznym. Szczegółowe informacje o prywatności użytkowników i wyrażaniu przez nich zgody znajdziesz w sekcji poniżej.

Wykrywanie pasywne, takie jak algorytm telefoniczny, nie ma dodatkowych konsekwencji dla prywatności użytkowników.

Aktywna detekcja, np. algorytm lokalizacji, wymaga określenia lokalizacji urządzenia, na co użytkownicy mogą nie chcieć się zgodzić. Lokalizacja może zostać wysłana przez sieć, aby określić identyfikator strefy czasowej.

Podejście Androida do ochrony prywatności użytkowników w zakresie wykrywania strefy czasowej umożliwia użytkownikom indywidualne wyłączanie algorytmów, które powinny być aktywne. Poza tym kod platformy AOSP nie obsługuje bezpośrednio samej lokalizacji: wykrywanie lokalizacji i mapowanie lokalizacji na identyfikatory stref czasowych pozostawiane komponentom wtyczek skonfigurowanych przez producentów urządzeń.

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

Konfiguracja

Producenci urządzeń mogą skonfigurować usługę time_zone_detector, aby zmienić jej działanie. W tej sekcji 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 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ść 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 platforma domyślnie aktualizuje wartość ustawienia auto_time_zone. Jeśli chcesz mieć pewność, że to ustawienie nie zostanie przywrócone z kopii zapasowej, dodaj element auto_time_zone do tablicy restore_blocked_global_settings zdefiniowanej w elementach 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). Podczas testowania za pomocą wartości device_config, zwłaszcza 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 zapobiec synchronizacji flag w Androidzie 12 lub nowszym, wpisz:

adb shell cmd device_config set_sync_disabled_for_tests persistent

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

adb shell cmd device_config set_sync_disabled_for_tests none

Po przywróceniu synchronizacji flag zrestartuj urządzenie.

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

Interakcja z usługą time_zone_detector

Aby wyświetlić time_zone_detector 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, wpisz:

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 w celu testowania lub w produkcji. Szczegółowe informacje znajdziesz w sekcji Konfigurowanie urządzenia przy użyciu usługi device_config.

Aby sprawdzać wykrywanie strefy czasowej, testerzy muszą wiedzieć, jakiego algorytmu używa time_zone_detector. 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 znajdziesz w artykule Ustawienia strefy czasowej.
  • Użyj wiersza poleceń w narzędziu adb:

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

Poniżej znajdziesz przykładowe dane wyjściowe polecenia adb shell cmd time_zone_detector dump. Informacje o bieżącym algorytmie i stanie usługi są 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 za pomocą kontrolera zasad dotyczących urządzeń.
mTelephonyDetectionSupported Określa, czy urządzenie ma wykrywanie strefy czasowej w telefonie.
mGeoDetectionSupported Określa, czy urządzenie obsługuje wykrywanie strefy czasowej lokalizacji. Jest to skuteczny stan oparty na konfiguracji oraz obecności co najmniej jednego 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.

Informacje o historii sugestii wskazują, które sugestie zostały wprowadzone przez użytkownika (ręcznie) oraz przez algorytmy telefoniczne i lokalizacyjne.