Platforma Androida korzysta z różnych źródeł czasu do synchronizacji czasu. Ta strona zawiera informacje na temat protokołu Network Time Protocol (NTP) Automatyczne źródła czasu tożsamości sieci i strefy czasowej (NITZ). Domyślnie w Androidzie 12 lub nowszym platforma traktuje NTP jako źródło czasu, a nie NITZ, ponieważ NTP to bardziej dokładne i niezawodne niż NITZ. W sytuacjach, gdy karta NTP jest niedostępna, stosowana jest zasada NITZ. To cofnięcie domyślnego priorytetu z wcześniejszych wersji platformy. Domyślnie w Androidzie 11 i starszych wersjach platforma nadaje priorytet NITZ przez NTP.
Więcej informacji o tej zmianie znajdziesz w tych aktualizacjach AOSP: 1563678 1513323.
Skonfiguruj priorytet źródła czasu
Aby skonfigurować, które źródło czasu ma domyślnie priorytet na określonym urządzeniu z Androidem
, skonfiguruj
config_autoTimeSourcesPriority
klucz w frameworks/base/core/res/res/values/config.xml
w momencie kompilacji. Godzina
sugestie ze źródła czasu, które jest wyżej na liście, mają pierwszeństwo
w przypadku źródeł znajdujących się niżej na liście.
Źródła czasu Androida, które można skonfigurować, znajdziesz tutaj:
TimeDetectorStrategy.java
Domyślnie są skonfigurowane te źródła:
- Telefonia (NITZ)
- Sieć (NTP)
Testowanie
Aby sprawdzić, czy urządzenie używa NITZ, gdy NTP jest niedostępne (gdy mobilna transmisja danych i Wi-Fi są wyłączone), wykonaj te czynności:
- Sprawdź, czy w jednostce organizacyjnej DUT jest sprawna karta SIM
- Wyłącz mobilną transmisję danych i Wi-Fi
- Przełącz urządzenie w tryb samolotowy, aby upewnić się, że radio w sieci komórkowej jest wyłączone.
- Wyłączanie automatycznego wykrywania czasu
- Ustaw ręcznie nieprawidłowy czas w przyszłości
- Zrestartuj urządzenie
- Włączanie automatycznego wykrywania czasu
- Wyłącz tryb samolotowy
Te kroki powodują zmianę zegara systemowego natychmiast po NITZ jest odbierany sygnał. Aby sprawdzić, jak czas urządzenia jest ustawiony, uruchom to polecenie:
adb shell dumpsys time_detector
Aby sprawdzić, czy zegar systemowy używa NITZ, potwierdź to w poleceniu dane wyjściowe:
mEnvironment.isAutoTimeDetectionEnabled()
:true
.mEnvironment.autoOriginPriorities()
zawiera listę źródeł czasu a źródła znajdujące się wyżej na liście mają pierwszeństwo przed źródłami znajdującymi się niżej w rankingu. z listy.- Sekcja
Time change log
pokazuje, że zegar systemowy jest ustawiony przy użyciu sugestia dotycząca telefonii. - Sekcja
Telephony suggestion history
zawiera proponowane terminy. - Sekcja
Network suggestion history
jest pusta.
Sugerowane terminy w Telephony suggestion history
i
Sekcje Network suggestion history
są uważane za źródło danych dla:
obecnie się znajdujesz. Jeśli urządzenie jest połączone z internetem i ma kartę SIM, sugestie
są generowane przy użyciu zarówno sieci NTP, jak i NITZ (telefoniczne). W tym przypadku testowym
tylko sekcja Telephony suggestion history
zawiera sugestie, ponieważ
Protokół NTP jest wyłączony.
Sekcja Time change log
rejestruje zmiany wprowadzone w ustawieniach
zegara systemowego i użytej sugestii. Zegar systemowy jest ustawiony na podstawie
kolejność źródeł czasu na liście priorytetów w argumencie
klawisz config_autoTimeSourcesPriority
. Sugestie pochodzące od
źródło o wyższym priorytecie może zostać zignorowane, jeśli sugestia jest zbyt stara lub nieprawidłowa.
Ponadto, jeśli prawidłowa sugestia o najwyższym priorytecie jest zgodna z obecną odpowiedzią na urządzeniu
zegar systemowy nie zmieni się z dokładnością do kilku sekund.
W tym przypadku, jeśli sugestie są aktualne, zegar systemowy
jest ustawiana na podstawie jednej z sugestii z Telephony suggestion history
.
Oto przykład danych wyjściowych, po których urządzenie wraca do pracy, używając NITZ, gdy NTP jest niedostępne.
TimeDetectorStrategy:
mLastAutoSystemClockTimeSet=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000}
mEnvironment.isAutoTimeDetectionEnabled()=true
mEnvironment.elapsedRealtimeMillis()=73059
mEnvironment.systemClockMillis()=1614186767818
mEnvironment.systemClockUpdateThresholdMillis()=2000
mEnvironment.autoTimeLowerBound()=2021-02-24T15:44:15Z(1614181455000)
mEnvironment.autoOriginPriorities()=[network,telephony]
Time change log:
66261 / 2021-02-24T17:12:41.020Z - Set system clock using time=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000} cause=Found good telephony suggestion., bestTelephonySuggestion=TelephonyTimeSuggestion{mSlotIndex='0', mUtcTime=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000}, mDebugInfo=[Sending new time suggestion nitzSignal=TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}}, reason=handleNitzReceived(TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}})]}, detectionReason=New telephony time suggested. timeSuggestion=TelephonyTimeSuggestion{mSlotIndex='0', mUtcTime=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000}, mDebugInfo=[Sending new time suggestion nitzSignal=TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}}, reason=handleNitzReceived(TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}})]} elapsedRealtimeMillis=66259 newSystemClockMillis=1614186761019
Telephony suggestion history:
key idx: 0=0
val idx: 0=TelephonyTimeSuggestion{mSlotIndex='0', mUtcTime=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000}, mDebugInfo=[Sending new time suggestion nitzSignal=TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}}, reason=handleNitzReceived(TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}})]}
Historic values=[
0@PT1M6.258S: TelephonyTimeSuggestion{mSlotIndex='0', mUtcTime=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000}, mDebugInfo=[Sending new time suggestion nitzSignal=TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}}, reason=handleNitzReceived(TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}})]}
]
Network suggestion history:
{Empty}
Gnss suggestion history:
{Empty}
External suggestion history:
{Empty}
Dla porównania jako porównania z wynikami w scenariuszu testowania funkcja to przykład typowych danych wyjściowych, na których urządzenie otrzymuje sugestie dotyczące czasu ze źródeł czasu NTP i NITZ.
TimeDetectorStrategy:
mLastAutoSystemClockTimeSet=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000}
mEnvironment.isAutoTimeDetectionEnabled()=true
mEnvironment.elapsedRealtimeMillis()=302926
mEnvironment.systemClockMillis()=1614186997685
mEnvironment.systemClockUpdateThresholdMillis()=2000
mEnvironment.autoTimeLowerBound()=2021-02-24T15:44:15Z(1614181455000)
mEnvironment.autoOriginPriorities()=[network,telephony]
Time change log:
66261 / 2021-02-24T17:12:41.020Z - Set system clock using time=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000} cause=Found good telephony suggestion., bestTelephonySuggestion=TelephonyTimeSuggestion{mSlotIndex='0', mUtcTime=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000}, mDebugInfo=[Sending new time suggestion nitzSignal=TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}}, reason=handleNitzReceived(TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}})]}, detectionReason=New telephony time suggested. timeSuggestion=TelephonyTimeSuggestion{mSlotIndex='0', mUtcTime=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000}, mDebugInfo=[Sending new time suggestion nitzSignal=TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}}, reason=handleNitzReceived(TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}})]} elapsedRealtimeMillis=66259 newSystemClockMillis=1614186761019
Telephony suggestion history:
key idx: 0=0
val idx: 0=TelephonyTimeSuggestion{mSlotIndex='0', mUtcTime=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000}, mDebugInfo=[Sending new time suggestion nitzSignal=TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}}, reason=handleNitzReceived(TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}})]}
Historic values=[
0@PT1M6.258S: TelephonyTimeSuggestion{mSlotIndex='0', mUtcTime=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000}, mDebugInfo=[Sending new time suggestion nitzSignal=TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}}, reason=handleNitzReceived(TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}})]}
]
Network suggestion history:
0@PT4M4.04S: NetworkTimeSuggestion{mUtcTime=TimestampedValue{mReferenceTimeMillis=244038, mValue=1614186939242}, mDebugInfo=[Origin: NetworkTimeUpdateService. event=3]}
Gnss suggestion history:
{Empty}
External suggestion history:
{Empty}