Android çerçevesi, zaman senkronizasyonu için çeşitli zaman kaynakları kullanır. Bu sayfada, Network Time Protocol (NTP) ve Network Identity and Time Zone (NITZ) otomatik zaman kaynakları ele alınmaktadır. Android 12 veya sonraki sürümlerde varsayılan olarak çerçeve, NITZ'den daha doğru ve güvenilir olduğu için zaman kaynağı olarak NTP'ye öncelik verir. NTP'nin kullanılamadığı durumlarda çerçeve NITZ'ye geri döner. Bu, platformun önceki sürümlerindeki varsayılan önceliğin tersidir. Android 11 ve önceki sürümlerde çerçeve, varsayılan olarak NTP yerine NITZ'e öncelik verir.
Bu değişiklikle ilgili daha fazla bilgi için aşağıdaki AOSP yamalarına bakın: 1563678, 1513323.
Zaman kaynağı önceliğini yapılandırma
Belirli bir Android sürümünde hangi zaman kaynağının varsayılan olarak öncelikli olacağını yapılandırmak için derleme sırasında frameworks/base/core/res/res/values/config.xml
'deki config_autoTimeSourcesPriority
anahtarını yapılandırın. Listede daha yukarıda yer alan zaman kaynağındaki zaman önerileri, listede daha aşağıda yer alan kaynaklara göre önceliklidir.
Yapılandırılabilen Android zaman kaynakları TimeDetectorStrategy.java
içinde bulunur.
Aşağıdaki kaynaklar varsayılan olarak kullanılacak şekilde yapılandırılır:
- Telefon Hizmeti (NITZ)
- Ağ (NTP)
Test
NTP kullanılamadığında (mobil veri ve kablosuz bağlantı devre dışı olduğunda) cihazın NITZ'yi kullandığını doğrulamak için aşağıdakileri yapın:
- DUT'ta çalışan bir SIM kart olduğundan emin olun.
- Mobil veriyi ve kablosuz bağlantıyı kapatın
- Hücresel radyonun kapalı olduğundan emin olmak için cihazı uçak moduna geçirin.
- Otomatik zaman algılamayı devre dışı bırakma
- Saati gelecekteki yanlış bir zaman değerine manuel olarak ayarlayın.
- Cihazı yeniden başlatın.
- Otomatik zaman algılamayı etkinleştirme
- Cihazı uçak modundan çıkarın
Bu adımlar, NITZ sinyali alındığı anda sistem saatinde değişikliğe neden olur. Cihaz saatinin nasıl ayarlandığını kontrol etmek için aşağıdaki komutu çalıştırın:
adb shell dumpsys time_detector
Sistem saatinin NITZ kullandığını doğrulamak için komut çıkışında aşağıdakileri onaylayın:
mEnvironment.isAutoTimeDetectionEnabled()
true
.mEnvironment.autoOriginPriorities()
, listede daha yukarıda yer alan kaynakların listede daha aşağıda yer alan kaynaklara göre öncelikli olduğu bir zaman kaynakları listesini içerir.Time change log
bölümünde, sistem saatinin telefon önerisi kullanılarak ayarlandığı gösterilmektedir.Telephony suggestion history
bölümünde zaman önerileri yer alır.Network suggestion history
bölümü boş.
Telephony suggestion history
ve Network suggestion history
bölümlerindeki zaman önerileri, zamanla ilgili doğru bilgi kaynağı olarak kabul edilir. Cihaz internete bağlıysa ve SIM kartı varsa hem NTP (ağ) hem de NITZ (telefon) kullanılarak öneriler oluşturulur. Bu test senaryosunda, NTP devre dışı olduğundan yalnızca Telephony suggestion history
bölümünde öneriler yer alır.
Time change log
bölümünde, cihazın sistem saatinde yapılan değişiklikler ve kullanılan öneri kaydedilir. Sistem saati, config_autoTimeSourcesPriority
anahtarındaki öncelik listesinde yer alan zaman kaynaklarının sırasına göre ayarlanır. Ancak daha yüksek öncelikli bir kaynaktan gelen öneriler, çok eski veya geçersizse yoksayılabilir.
Ayrıca, en yüksek öncelikli geçerli öneri, cihazın mevcut sistem saatiyle birkaç saniye içinde eşleşirse saat değiştirilmez.
Bu test senaryosunda, öneriler güncel olduğu sürece sistem saati Telephony suggestion history
içindeki önerilerden biri kullanılarak ayarlanır.
Aşağıda, NTP kullanılamadığında cihazın NITZ'yi kullandığı bir çıkış örneği verilmiştir.
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}
Test senaryosundaki çıkışla karşılaştırma için referans olarak, cihazın hem NTP hem de NITZ zaman kaynaklarından zaman önerileri aldığı tipik bir çıkış örneğini aşağıda bulabilirsiniz.
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}