Przegląd czasu

Na tej stronie dowiesz się, jak działa wykrywanie godziny i strefy czasowej na Androidzie. 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 godzin i stref czasowych

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

  • Obecny czas uniksowy
  • Bieżąca strefa czasowa

Obecny czas uniksowy i bieżąca strefa czasowa obowiązują na całym urządzeniu. Oznacza to, że są one dostępne dla wszystkich użytkowników urządzenia.

Obecny czas uniksowy nie jest stałą wartością. Aktualizuje się automatycznie zgodnie z upływem czasu. Poza normalnym upływem czasu bieżący czas uniksowy urządzenia jest korygowany, jeśli okaże się, że jest nieprawidłowy, np. gdy urządzenie utraci zasilanie.

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 obliczyć czas lokalny, wszystkie urządzenia z Androidem mają bazę danych zawierającą wszystkie globalne reguły strefy czasowej. Więcej informacji o regułach dotyczących strefy czasowej znajdziesz w artykule Reguły stref czasowych.

Gdy użytkownik podróżuje do nowej lokalizacji, w której jest inna strefa czasowa, nie trzeba dostosowywać bieżącego czasu uniksowego, ale zwykle chce sprawdzać czas lokalny, a nie w 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: sprawdza, czy na urządzeniu jest ustawiona prawidłowa bieżąca strefa czasowa.

Automatyczne wykrywanie czasu

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

Usługa time_detector

Automatyczne wykrywanie czasu zarządza usługa time_detector dostępna na urządzeniach z Androidem 10 lub nowszym. Gdy automatyczne wykrywanie czasu jest włączone, dostosowuje bieżący czas uniksowy urządzenia.

Usługa time_detector ma zawsze jeden z 2 stanów: nieokreślony lub określony. 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 ma określony czas, co oznacza, że otrzymała sugestię z informacjami o czasie uniksowym, zastępuje ona bieżący czas uniksowy, jeśli proponowany czas różni się od aktualnego czasu uniksowego.

Gdy wartość time_detector ma określone wartości, nie zastępuje ona 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ę też niepewna, jeśli otrzymane sugestie są uznawane za zbyt stare, aby nie można ich było użyć. Wiek sugestii jest uwzględniany, ponieważ korekty korzystające ze starych sugestii czasu uniksowego w czasie uniksowym opierają się na zegarze czasu rzeczywistego na urządzeniu, który w dłuższym okresie 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 różne w zależności od ich pochodzenia.

Usługa time_detector jest stanowa, co oznacza, że przechowuje najnowsze sugestie poszczególnych źródeł. Jeśli źródło ma nowsze informacje o czasie uniksowym, do time_detector są wysyłane nowe sugestie. Usługa time_detector ponownie sprawdza nowe i dotychczasowe sugestie oraz aktualizuje stan urządzenia po ich otrzymaniu.

Chociaż czas UTC jest uzgadniany międzynarodowo, 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. Przejście między tymi dwoma elementami wymaga wiedzy o tym, kiedy występują sekundy przestępne i jak są one obsługiwane przez źródła.
  • Źródła mogą być dostępne tylko w określonych momentach lub w określonych okolicznościach. Jeśli na przykład punkt początkowy wymaga połączenia sieciowego, może być dostępny tylko wtedy, gdy urządzenie jest połączone z internetem.
  • Źródła mogą być niedokładne lub niedokładne albo zawierać błędy. Jeśli na przykład stacja telefoniczna telefonii komórkowej nie śledzi poprawnie „czasu uniwersalnego”, źródło usług telefonicznych może podawać niedokładne sugestie czasu.
  • Podczas pobierania czasu uniksowego mogą występować nieścisłości. Na przykład opóźnienie sieci, buforowanie lub planowanie procesu może spowodować, że czas uniksowy będzie niedokładny.
  • Zegar referencyjny użyty do skorygowania sugestii według czasu, który upłynął od jej otrzymania, może być niedokładny.

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

  • 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 ź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ż te źródła, które nie są domyślnie skonfigurowane do użytku:

  • 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 aplikacji Ustawienia AOSP w sekcji System > Data i godzina.

Automatyczne wykrywanie czasu w Ustawieniach

Rysunek 1. Automatyczne wykrywanie czasu w Ustawieniach.

W tej tabeli opisano opcje kontroli dla użytkowników dotyczące wykrywania czasu w aplikacji Ustawienia AOSP.

*W Androidzie 11 i starszych wersjach 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 urządzenie jest włączone, odpowiada za wykrywanie bieżącego czasu uniksowego. Gdy to ustawienie jest wyłączone, użytkownicy mogą ręcznie ustawiać czas urządzenia.

Gdy użytkownik wpisze godzinę ręcznie, wpisze czas lokalny, a nie czas uniksowy. Bieżący czas uniksowy jest obliczany na podstawie bieżącej strefy czasowej w celu uzyskania czasu uniksowego.

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.

Określanie priorytetów punktu początkowego

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 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 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 jest zgodna z bieżącym czasem systemowym urządzenia z dokładnością do kilku sekund, godzina urządzenia nie się zmieni. Pozwala to uniknąć tworzenia zadań w zainstalowanych aplikacjach, które słuchają intencji 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órne ograniczenie czasowe, aby uniemożliwić urządzeniu użycie sugerowanej godziny, która może wywołać problem Y2038.

W Androidzie 12 wprowadzono dolny limit czasu, który służy do weryfikowania sugestii dotyczących czasu otrzymanych 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

W tej sekcji znajdziesz informacje na temat debugowania i testowania działania usługi time_detector i innych komponentów współdzielonych przez wszystkie źródła.

Interakcja z usługą time_detector

Aby wyświetlić konfigurację 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

Dane wyjściowe pomocy zawierają też opis właściwości usługi device_config, których można używać do wpływania na działanie time_detector w środowisku testowym lub produkcyjnym. 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ładowe dane wyjściowe polecenia adb shell cmd time_detector dump. Informacje o bieżącym źródle i stanie usługi są pogrubione:

$ 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 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, zarządzanie ustawieniami użytkowników w ustawieniach, wykrywaniem połączeń telefonicznych i lokalizacji, a także szczegóły testowania.

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. Po włączeniu automatycznego wykrywania strefy czasowej dostosowuje ona bieżącą strefę czasową na urządzeniu.

Gdy automatyczne wykrywanie strefy czasowej jest włączone, time_zone_detector może mieć 1 z 2 stanów: niepotwierdzone lub określone.

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, które może spowodować zastąpienie obecnej strefy czasowej. Gdy wartość 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 ona bieżącej strefy czasowej.

Niektóre stany usługi time_zone_detector mogą obejmować te, w których time_zone_detector nie ma informacji o strefie czasowej, której można użyć, lub gdy usługa ma kilka stref czasowych do wyboru. 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 niepewnego stanu, ale wskazuje, że funkcja time_zone_detector nie musi podejmować żadnych działań, aby określić strefę czasową.
  • 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.

Pewny lub niepewny stan usługi time_zone_detector jest określany na podstawie sugestii strefy czasowej, które są wysyłane przez algorytm.

Ogólnie sugestie są podzielone na 2 typy, które ściśle odpowiadają możliwym stanom time_zone_detector: pewne i niepewne. Oto przykłady typów sugestii:

  • typ = uncertain, zoneIds = []

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

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

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

    • Algorytm 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 różne w zależności od ich algorytmu. W zależności od algorytmu sugestie mogą też zawierać metadane wskazujące jego pewność.

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:

  • Telefonia
  • 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, z którego korzysta urządzenie, jest określany na podstawie ustawień strefy czasowej skonfigurowanych przez użytkownika. Gdy algorytm nie ma pewności co do strefy czasowej, time_zone_detector zwykle nie korzysta z sugestii z innego algorytmu. Sugestie powiązane z nieużywanymi algorytmami mogą być przechowywane w pamięci przez funkcję time_zone_detector, ale nie są używane, dopóki algorytm się nie zmieni. Gdy użytkownik zmieni ustawienia automatycznego wykrywania strefy czasowej, a algorytm ulegnie zmianie, 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 wersjach zastępczego połączenia telefonicznego można aktywować funkcję zastępczą za pomocą interfejsów API do raportowania stanu LTZP. Oznacza to, że jeśli sieć LTZP zgłosi, że jest niepewna, a jego zdolność do wykrywania lokalizacji lub strefy czasowej jest pogorszona przez środowisko, uruchamiany jest tryb zastępczy połączenia telefonicznego.

W trybie zastępczym połączeń telefonicznych usługa time_zone_detector używa sugestii telefonicznych tak, jakby wykrywanie lokalizacji było wyłączone, dopóki algorytm lokalizacji nie przekaże określonej sugestii. 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 poniższej tabeli opisano opcje kontroli dla użytkowników dotyczące wykrywania strefy czasowej w aplikacji Ustawienia AOSP.

*W Androidzie 11 i starszych wersjach to ustawienie jest oznaczone 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 ta 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 Użyj lokalizacji, aby ustawić strefę czasową Bieżący użytkownik

Przełącznik.

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

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

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

Przełącznik.

Umożliwia lub uniemożliwia 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] Automatyczne ustawianie strefy czasowej: WŁĄCZONE

    • [Lokalizacja] Użyj 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żyj lokalizacji, aby ustawić strefę czasową: WYŁ.

        • Sygnały telefoniczne są używane do wykrywania strefy czasowej.

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 obsługujące tylko algorytm wykrywania strefy czasowej lokalizacji

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

  • Android 14 lub nowszy

    • Opcja Użyj lokalizacji nie jest widoczna w aplikacji Ustawienia AOSP, a urządzenie działa tak, jakby była włączona opcja Użyj lokalizacji.
    • Wartość ustawienia ograniczonego do użytkownika SettingsProviderlocation_time_zone_detection_enabled jest ignorowana. 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 Ustawienia AOSP, a 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 w Ustawieniach zmianę skutkującą zmianą bieżącego algorytmu usługi time_zone_detector, usługa time_zone_detector mogła już otrzymać sugestie dotyczące nowego algorytmu, dlatego czas urządzenia może zostać natychmiast zmieniony, tak aby odpowiadał opinii usługi time_zone_detector.

Wykrywanie strefy czasowej w telefonach

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 telefonach.

Wykrywanie strefy czasowej lokalizacji

Wykrywanie strefy czasowej lokalizacji jest dostępne na Androidzie 12 i nowszych. To opcjonalna funkcja automatycznego wykrywania strefy czasowej, która umożliwia urządzeniom określenie bieżącej strefy czasowej na podstawie lokalizacji.

Wprowadzona w Androidzie 12 usługa location_time_zone_manager działa na serwerze systemowym i zawiera kod odpowiedzialny za przesyłanie sugestii dotyczących 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 wtyczek.

Prawidłowość różni się zwykle w zależności od tych czynników:
  • Dokładność i regularność dostawcy informacji o lokalizacji.
  • Jakość danych mapy strefy czasowej.
Możliwość aktualizacji Wykrywanie połączeń telefonicznych opiera się na plikach znajdujących się w aktualizowanym 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 używa danych mapy strefy czasowej serwera czy klienta.

Uwaga: moduł Dane o strefie czasowej nie zawiera danych mapy strefy czasowej, które służą do aktualizowania kopii TZDB na Androidzie i innych informacji o strefie czasowej.

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 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 lokalizacji geograficznej. Lokalizacja to dane wrażliwe. Użytkownicy mogą mieć obawy związane ze wiedzą o udostępnianiu ich lokalizacji 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ą wówczas wywnioskować nieprecyzyjne 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 środowisku urządzenia informuje urządzenie, jakiej strefy czasowej ma używać w danym środowisku.
  • Aktywne: urządzenie musi samodzielnie określić strefę czasową i w zależności od ustawień prywatności użytkownika oraz jego zgody może uzyskać w tym celu dostęp do lokalizacji. Następnie może udostępnić swoją lokalizację usługom zewnętrznym. Szczegółowe informacje na temat prywatności i zgody użytkowników znajdziesz w dyskusji poniżej.

Wykrywanie pasywne, np. przy użyciu algorytmu połączeń telefonicznych, nie ma dodatkowego wpływu na prywatność użytkowników.

Aktywne wykrywanie, na przykład w przypadku algorytmu lokalizacji, obejmuje określanie lokalizacji urządzenia, na którą użytkownicy mogą się nie zgadzać, oraz przesyłanie lokalizacji przez sieć w celu określenia identyfikatora 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 opisujemy opcje konfiguracji dotyczące ogólnego działania usługi time_zone_detector. Szczegóły konfiguracji algorytmów wykrywania połączeń telefonicznych i strefy czasowej znajdziesz w artykułach Wykrywanie strefy czasowej w telefonach i Wykrywanie strefy czasowej lokalizacji.

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 zastępczego telefonii. Ta funkcja jest dostępna na Androidzie 13 i nowszych.

Modyfikowanie domyślnego działania 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 zdefiniowanej 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 auto_time_zone do tablicy restore_blocked_global_settings zdefiniowanej w frameworks/base/packages/SettingsProvider/res/values/blocked_settings.xml.

Debugowanie i testowanie strefy czasowej

W tej sekcji znajdziesz informacje o debugowaniu i testowaniu działania usługi time_zone_detector i innych komponentów współdzielonych przez wszystkie algorytmy.

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

Usługa device_config to mechanizm używany na Androidzie do konfigurowania działania, które można modyfikować, przy użyciu wartości, które są zwykle pobierane z serwera zdalnego przez zastrzeżony kod (inny niż AOSP). Gdy do testowania używasz wartości device_config, zwłaszcza podczas długotrwałych testów ręcznych, urządzenie może synchronizować flagi, co powoduje zresetowanie flag i wyczyszczenie wartości ustawionych do 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 tych poleceń:

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

Dane wyjściowe pomocy zawierają też opis właściwości usługi device_config, które mogą wpływać na działanie usługi time_zone_detector w środowisku testowym lub produkcyjnym. 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 zrozumieć bieżący algorytm time_zone_detector i mieć na niego wpływ, skorzystaj z 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 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. 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 połączeń telefonicznych.
mGeoDetectionSupported Określa, czy urządzenie obsługuje wykrywanie strefy czasowej lokalizacji. Jest to stan efektywny określony na podstawie konfiguracji i obecności co najmniej jednego kanału LTZP.
mAutoDetectionEnabled Określa, czy automatyczne wykrywanie strefy czasowej jest włączone.
mLocationEnabled Przełącznik lokalizacji głównej.
mGeoDetectionEnabled Przełącznik algorytmu: false wskazuje algorytm telefonii, a true – algorytm lokalizacji.

Historia sugestii wskazuje, jakie sugestie zostały przesłane w Ustawieniach (ręcznie) oraz przez algorytmy telefonii i lokalizacji.