Android yapısı, zaman senkronizasyonu için çeşitli zaman kaynakları kullanır. Bu sayfa, Ağ Saat Protokolü (NTP) ile Ağ Kimliği ve Saat Dilimi (NITZ) otomatik saat kaynaklarına odaklanmaktadır. NTP, NITZ'den daha doğru ve güvenilir olduğundan, Android 12 veya sonraki sürümlerde varsayılan olarak çerçeve, NITZ'ye göre NTP'ye zaman kaynağı olarak öncelik verir. NTP'nin kullanılamadığı durumlarda, çerçeve NITZ'ye geri döner. Bu işlem, platformun önceki sürümlerine göre varsayılan önceliğin tersine çevrilmiştir. Android 11 ve önceki sürümlerde varsayılan olarak çerçeve, NTP'den ziyade NITZ'ye öncelik verir.
Bu değişiklikle ilgili daha fazla bilgi için şu AOSP yamalarını inceleyin: 1563678, 1513323.
Zaman kaynağı önceliğini yapılandırın
Belirli bir Android sürümü için varsayılan olarak hangi zaman kaynağının öncelikli olacağını yapılandırmak üzere derleme sırasında frameworks/base/core/res/res/values/config.xml
içindeki config_autoTimeSourcesPriority
anahtarını yapılandırın. Listede daha üstte yer alan zaman kaynağına ait zaman önerileri, listede daha alt sıralardaki kaynaklara göre önceliklidir.
Yapılandırılabilen Android zaman kaynakları TimeDetectorStrategy.java
konumunda bulunmaktadır.
Aşağıdaki kaynaklar varsayılan olarak kullanılacak şekilde yapılandırılmıştır:
- Telefon (NITZ)
- Ağ (NTP)
Test etme
NTP kullanılamadığında cihazın NITZ kullandığını doğrulamak için (mobil veri ve kablosuz bağlantı devre dışıyken) aşağıdakileri yapın:
- DUT içinde çalışan bir SIM olduğundan emin olun
- Mobil veri ve kablosuz bağlantıyı kapat
- Hücresel radyonun kapalı olduğundan emin olmak için cihazı uçak moduna alın
- Otomatik zaman algılamayı kapatma
- Saati manuel olarak gelecekte yanlış bir zaman değerine ayarlayın
- Cihazı yeniden başlatma
- Otomatik zaman algılamayı açın
- Cihazı uçak modundan çıkarın
Bu adımlar, NITZ sinyali alınır alınmaz sistem saatinde bir değişiklik tetikler. 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 üstte yer alan ve listede daha altta yer alan kaynaklara göre öncelikli olan zaman kaynaklarının listesini içerir.Time change log
bölümünde, sistem saatinin bir telefon önerisi kullanılarak ayarlandığı gösteriliyor.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, zamanın doğru 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 durumunda, NTP devre dışı bırakıldığı için yalnızca Telephony suggestion history
bölümünde öneriler bulunur.
Time change log
bölümü, cihazın sistem saatinde yapılan değişiklikleri ve kullanılan öneriyi kaydeder. Sistem saati, config_autoTimeSourcesPriority
tuşundaki öncelik listesinde yer alan zaman kaynaklarının sırasına göre ayarlanır. Bununla birlikte, öneri çok eski veya geçersizse daha yüksek öncelikli kaynaktan gelen öneriler yoksayılabilir.
Ayrıca, en yüksek öncelikli geçerli öneri, cihazın mevcut sistem saatiyle birkaç saniye içinde eşleşirse zaman değişmez.
Bu test durumunda, öneriler güncel olmadığı sürece sistem saati, Telephony suggestion history
sayfasındaki önerilerden biri kullanılarak ayarlanır.
Aşağıda, NTP kullanılamadığında cihazın NITZ kullanmaya başladığı 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 çıktıyla karşılaştırma olarak referans olması için aşağıda cihazın hem NTP hem de NITZ zaman kaynaklarından zaman önerileri aldığı tipik bir çıkış örneği verilmiştir.
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}