Przegląd czasu

Na tej stronie dowiesz się, jak działa wykrywanie godziny i strefy czasowej na Androidzie. Ten obejmuje to, jak Android automatycznie wykrywa godzinę i strefy czasowe, dla producentów urządzeń oraz informacje dotyczące testów.

Omówienie godzin 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.

Bieżąca strefa czasowa określa korektę, która ma zostać przekonwertowana bieżącego czasu uniksowego na czas lokalny. Na przykład latem w Los Angeles w Anglii, urządzenie odejmuje 7 godzin od obecnego czasu uniksowego oraz w w okresie zimowym za 8 godzin.

Aby można było obliczyć czas lokalny, wszystkie urządzenia z Androidem mają baza danych wszystkich globalnych reguł strefy czasowej. Więcej informacji o regułach dotyczących strefy czasowej znajdziesz w artykule Reguły strefy czasowej.

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.

Dzięki AOSP użytkownicy mogą samodzielnie kontrolować, czy godzina i strefa czasowa są ustawiany dla nich automatycznie za pomocą poniższych 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

Ta sekcja zawiera omówienie usługi time_detector, która zarządza automatyczne wykrywanie czasu, ustawienia użytkownika, opcje konfiguracji i testowanie .

Usługa time_detector

time_detector usługa, dostępna na urządzeniach z Androidem 10 lub nowszym, zarządza automatycznym czasem wykrywaniem zagrożeń. Dostosuje bieżący czas uniksowy urządzenia odpowiednio do potrzeb automatyczne wykrywanie czasu jest włączone.

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 ma określoną wartość, co oznacza, że otrzymała sugestia z informacjami o czasie epoki uniksowej, zastępuje ona bieżącą strefę uniksową time, jeśli proponowany czas jest inny niż bieżący czas uniksowy.

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 wystarczająco dużo czasu sugestie. 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 określić bieżący czas uniksowy, urządzenie ma różne z jakich źródeł może korzystać. W tym dokumencie są to tzw. origins. Usługa time_detector traktuje sekwencje sugestii jako różne na podstawie: o ich pochodzeniu.

Usługa time_detector jest stanowa, co oznacza, że przechowuje najnowszą sugestię utworzoną przez każde źródło. Nowe sugestie są wysyłane do time_detector, jeśli źródło ma nowsze informacje o czasie epoki uniksowej i dostępności informacji. Usługa time_detector ponownie sprawdza nowe i istniejące sugestie i aktualizuje stan urządzenia po otrzymaniu sugestii.

Chociaż czas UTC jest uzgadniany w różnych krajach, istnieją różne powody, określenie obecnego czasu uniksowego nie zawsze jest proste Urządzenie 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 jak są 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ć: używa sieci serwerów czasu NTP.
  • 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: używa GPS-u. dostawcy lokalizacji w celu uzyskania godziny 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 wersjach to ustawienie jest oznaczone etykietą Używaj czas podany 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 ta opcja jest wyłączona, użytkownicy mogą skonfigurować ręcznie.

Gdy użytkownik wpisuje godzinę ręcznie, podaje czas lokalny, a nie czas uniksowy. obecnie się znajdujesz. Bieżący czas uniksowy jest obliczany na podstawie bieżącej strefy czasowej aby obliczyć 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 na stałe zakodowany na ["telephony", "network"], co oznacza, że sugestie dotyczące połączeń telefonicznych są traktowane priorytetowo powyżej sugestii dotyczących 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 telefonów są skonfigurowane jako źródło, które ma być domyślnie używane. Sugerowane godziny korzystania z sieci są mają wyższy priorytet niż sugestie związane z czasem telefonicznym. 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 punktu początkowego to:

Dozwolone granice czasu

Android 14 wprowadza 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órny limit czasu, aby uniemożliwić urządzeniu na podstawie sugerowanej godziny, która może wywołać problem Y2038.

W Androidzie 12 wprowadzono dolną granicę czasu, która jest używana zweryfikować sugestie dotyczące czasu otrzymane przez usługę time_detector. Niższa wartość ograniczenia czasu używana w przypadku automatycznych sugestii jest określana 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 proponowany termin przypada przed dolną granicą czasu, Usługa time_detector odrzuca sugestię, ponieważ nie może być prawidłowa, jeśli sygnatura czasowa kompilacji jest prawidłowa.

Na urządzeniach z Androidem 11 lub starszym usługa time_detector nie sprawdzać przychodzące sugestie czasu uniksowego związane z czasem epoki.

Debugowanie i testowanie czasu

W tej sekcji znajdziesz informacje o debugowaniu i testowaniu działania usługę time_detector i inne komponenty, które są udostępniane 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, 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żyć wpływa na działanie time_detector w testach lub w środowisku produkcyjnym. Więcej informacji: Konfigurowanie urządzenia przy użyciu usługi device_config.

Aby sprawdzać automatyczne wykrywanie czasu, testerzy muszą wiedzieć, które źródła Korzysta z time_detector usługi. Oto przykład danych wyjściowych z adb shell cmd time_detector dump z informacjami o bieżący stan źródła i usługi pogrubiony:

$ 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ł 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

Ta sekcja zawiera omówienie usługi time_zone_detector, która zarządza automatycznym wykrywaniem strefy czasowej, ustawieniami użytkownika w ustawieniach, połączeniami telefonicznymi wykrywanie strefy czasowej lokalizacji i testowanie.

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 jest niepewne, oznacza, że nie otrzymano żadnych informacji lub są to informacje o niskim stopniu pewności, Oznacza to, że nie zastąpi ona obecnej strefy czasowej.

Niektóre stany usługi time_zone_detector mogą obejmować stany, w których time_zone_detector nie ma informacji o strefie czasowej, której można użyć, lub o jej lokalizacji wiele stref czasowych do wyboru. Oto następujące stany:

  • Gdy urządzenie jest w trybie gdzieś bez strefy czasowej, np. na wodach międzynarodowych lub spornego obszaru. 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. Jeśli bieżąca strefa czasowa to której jedna ze stref czasowych, której używa time_zone_detector, jest pewna, bieżąca strefa czasowa pozostaje bez zmian. W przeciwnym razie jeden z dostępnych terminów strefy. 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.

Ogólnie sugestie są podzielone na 2 rodzaje, które ściśle pasują do możliwych stanów: z 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 pewien, ale nie ma powiązanego identyfikatora strefy z bieżącą lokalizacją.
  • typ = certain, zoneIds = ["America/Denver", "America/Phoenix"]

    • Algorytm ma pewność, że odpowiedzią jest jedna z 2 stref, ale nie mogę wybrać „Ameryka/Denver” i „America/Fhoenix”.

Usługa time_zone_detector traktuje sekwencje sugestii jako różne na podstawie algorytmu. W zależności od algorytmu mogą też pojawiać się sugestie zawierają metadane wskazujące poziom pewności algorytmu.

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 istniejące sugestie oraz aktualizuje stan urządzenia po otrzymanych sugestii.

Android obsługuje 2 algorytmy wykrywania strefy czasowej:

  • Telefonia
  • Lokalizacja

Usługa time_zone_detector zwykle używa jednego algorytmu do określić strefę czasową. Jeśli urządzenie obsługuje algorytm lokalizacji, Algorytm używany przez urządzenie jest określany na podstawie Ustawienia strefy czasowej skonfigurowane 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 związane z nieużywanymi algorytmami mogą być przechowywane w pamięci przez 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.

szczegółowe informacje o sytuacji, w której do określenia strefy czasowej, zobacz Tryb zastępczy 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 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ć w sekcji „Strefa czasowa” w ustawieniach strefy czasowej. Tryb jest włączony automatycznie po ponownym uruchomieniu urządzenia i po 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 zastępczym połączeń telefonicznych usługa time_zone_detector korzysta z połączeń telefonicznych sugestie , tak jakby wykrywanie lokalizacji było wyłączone do czasu działania algorytmu lokalizacji sugeruje pewną sugestię. Po otrzymaniu określonej sugestii system telefoniczny tryb zastępczy jest wyłączony i używane są tylko sugestie dotyczące lokalizacji.

Szczegóły konfiguracji trybu zastępczego telefonu znajdziesz tutaj Konfiguracja wykrywania strefy czasowej.

Ustawienia strefy czasowej

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

Automatyczne wykrywanie strefy czasowej w Ustawieniach

Rysunek 2. Automatyczne wykrywanie strefy czasowej w Ustawieniach.

W poniższej tabeli opisano elementy sterujące dla użytkowników do wykrywania strefy czasowej w Ustawienia AOSP.

*W Androidzie 11 i starszych wersjach to ustawienie jest oznaczone etykietą Używanie 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 aktualnej godziny strefie. 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ść to istotne, jeśli urządzenie obsługuje wykrywanie strefy czasowej lokalizacji.

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] 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Ł.

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

Urządzenia wielu użytkowników

Kilka powiązanych ustawień jest ograniczonych do bieżącego użytkownika, Wykrywanie strefy czasowej na urządzeniu może się zmienić, gdy bieżący użytkownik zmiany na urządzeniu z Androidem, z którego korzysta wielu użytkowników.

Przełącznik Użyj lokalizacji do ustawienia strefy czasowej jest ograniczony do bieżącego użytkownika. nie jest ograniczone przez zasady dotyczące urządzeń, co oznacza, że użytkownicy mogą w dowolnym momencie zmienić nawet wtedy, gdy przełącznik Ustaw strefę czasową automatycznie jest wyłączony lub gdy ustawienia godziny lub strefy czasowej są ograniczone przez kontroler zasad dotyczących urządzeń.

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

Ta sekcja opisuje zachowanie urządzeń obsługujących tylko lokalizację. algorytmem bezpieczeństwa.

  • Android 14 lub nowszy

    • Opcja Użyj lokalizacji jest niewidoczna dla użytkowników w ustawieniach AOSP aplikacji, a urządzenie działa tak, jakby opcja Użyj lokalizacji była włączona.
    • Wartość ustawienia SettingsProvider ograniczonego do użytkownika Pole location_time_zone_detection_enabled jest ignorowane. Ta wartość rejestruje preferencjami 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 ta opcja jest wyłączona, parametr urządzenie nie wykryje 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 bieżącej strefy czasowej. Jeśli tak, , ponieważ użytkownik włącza automatyczne wykrywanie, strefa czasowa urządzenia może ulec zmianie , aby dostosować się do opinii usługi time_zone_detector.

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

Wykrywanie strefy czasowej w telefonach

Wykrywanie strefy czasowej w telefonach wykorzystuje sygnały telefoniczne do określenia bieżącej strefy czasowej strefie czasowej. Więcej informacji znajdziesz w sekcji Strefa czasowa połączeń telefonicznych Wykrywanie.

Wykrywanie strefy czasowej lokalizacji

Wykrywanie strefy czasowej lokalizacji jest dostępne na Androidzie 12 lub wyższą. To opcjonalna funkcja automatycznego wykrywania strefy czasowej, która umożliwia urządzeń na używanie ich lokalizacji do określania bieżącej strefy czasowej.

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.

Uwagi na temat 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 połączeń telefonicznych 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 informacji 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 strefy używany do aktualizowania kopii TZDB na Androidzie i innych okresów oraz informacje o strefie.

Producenci urządzeń muszą też wziąć pod uwagę spójność wersji między reguł strefy czasowej i danych mapy strefy czasowej.
Zużycie energii Brak lub niewielkie zużycie energii Zależy od ustawień lokalizacji użytkownika, używanych wtyczek i zwykle które 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 to dane wrażliwe. 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, 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 zapewnia 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 wprowadzać zmiany i jego zachowaniu. W tej sekcji opisano opcje konfiguracji interfejsu API działanie usługi time_zone_detector. Szczegóły konfiguracji algorytmów wykrywania połączeń telefonicznych i strefy czasowej, zobacz Wykrywanie stref czasowych połączeń telefonicznych oraz Wykrywanie strefy czasowej lokalizacji.

Podstawowa konfiguracja AOSP jest na frameworks/base/core/res/res/values/config.xml

Klucz konfiguracji Wartość AOSP Opis
config_supportTelephonyTimeZoneFallback true Gdy true, time_zone_detector używa połączeń telefonicznych trybu kreacji zastępczej. Ta funkcja jest dostępna na Androidzie 13. i wyższe.

Zmienianie domyślnego działania urządzenia

W AOSP automatyczne wykrywanie strefy czasowej jest domyślnie włączone w Ustawiono auto_time_zone na true. Aby wyłączyć automatyczne wykrywanie czasu domyślnie ustaw wartość def_auto_time_zone określoną w frameworks/base/packages/SettingsProvider/res/values/defaults.xml do: false.

Podczas przywracania kopii zapasowej z innego urządzenia platforma aktualizuje wartość domyślnego 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 debugowaniu i testowaniu działania usługa time_zone_detector oraz inne komponenty, które są wspólne dla wszystkich za pomocą algorytmów.

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

Usługa device_config to mechanizm używany na Androidzie do konfigurowania możliwe do modyfikacji zachowanie przy użyciu wartości, które są zwykle pobierane z serwera zdalnego za pomocą zastrzeżonego kodu (innego niż AOSP). Jeśli używasz wartości device_config do testowania, zwłaszcza podczas długotrwałych testów ręcznych, urządzenie może synchronizować flagi, co spowoduje zresetowanie flag i wyczyszczenie wartości ustawionych do testowania.

w Androidzie 12 lub nowszym, aby tymczasowo wyłączyć flagę synchronizacji, 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.

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ć konfigurację i stan: time_zone_detector time_zone_detector, użyj:

adb shell cmd time_zone_detector dump

Aby zobaczyć dodatkowe polecenia do debugowania i testowania wykrywania strefy czasowej, 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ą może wpływać na działanie usługi time_zone_detector na potrzeby testowania ani produkcji. Więcej informacji: Konfigurowanie urządzenia przy użyciu usługi device_config.

Aby sprawdzać poprawność wykrywania strefy czasowej, testerzy muszą wiedzieć, który algorytm Aplikacja time_zone_detector używa. Aby zrozumieć bieżący algorytm i wpływać na niego z time_zone_detector, użyj jednej z tych opcji:

  • Sprawdź to za pomocą interfejsu ustawień. Więcej informacji: 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 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 ma wykrywanie strefy czasowej połączeń telefonicznych.
mGeoDetectionSupported Określa, czy urządzenie obsługuje wykrywanie strefy czasowej lokalizacji. To jest skuteczny na podstawie konfiguracji oraz obecności co najmniej jednego 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 wskazuje algorytm lokalizacji.

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