Android फ़्रेमवर्क, समय सिंक करने के लिए अलग-अलग टाइम सोर्स का इस्तेमाल करता है. इस पेज पर, नेटवर्क टाइम प्रोटोकॉल (एनटीपी) और नेटवर्क आइडेंटिटी ऐंड टाइम ज़ोन (एनआईटीज़ेड) के ऑटोमैटिक टाइम सोर्स के बारे में बताया गया है. Android 12 या इसके बाद के वर्शन में, फ़्रेमवर्क डिफ़ॉल्ट रूप से एनआईटीज़ेड के मुकाबले, एनटीपी को टाइम सोर्स के तौर पर ज़्यादा प्राथमिकता देता है. ऐसा इसलिए, क्योंकि एनटीपी, एनआईटीज़ेड के मुकाबले ज़्यादा सटीक और भरोसेमंद है. अगर एनटीपी उपलब्ध नहीं है, तो फ़्रेमवर्क एनआईटीज़ेड का इस्तेमाल करता है. यह प्लैटफ़ॉर्म के पिछले वर्शन में डिफ़ॉल्ट प्राथमिकता के उलट है. Android 11 और इससे पहले के वर्शन में, फ़्रेमवर्क डिफ़ॉल्ट रूप से एनटीपी के मुकाबले, एनआईटीज़ेड को ज़्यादा प्राथमिकता देता है.
इस बदलाव के बारे में ज़्यादा जानने के लिए, AOSP के ये पैच देखें: 1563678, 1513323.
टाइम सोर्स की प्राथमिकता कॉन्फ़िगर करना
यह कॉन्फ़िगर करने के लिए कि Android के किसी खास वर्शन के लिए, डिफ़ॉल्ट रूप से कौनसे टाइम सोर्स को प्राथमिकता दी जाए, बिल्ड के समय frameworks/base/core/res/res/values/config.xml में मौजूद config_autoTimeSourcesPriority कुंजी को कॉन्फ़िगर करें. सूची में ऊपर मौजूद टाइम सोर्स से मिले समय के सुझावों को, सूची में नीचे मौजूद सोर्स से मिले सुझावों के मुकाबले ज़्यादा प्राथमिकता दी जाती है.
Android के उन टाइम सोर्स के बारे में जानने के लिए जिन्हें कॉन्फ़िगर किया जा सकता है,
TimeDetectorStrategy.java देखें.
डिफ़ॉल्ट रूप से, इन सोर्स को इस्तेमाल करने के लिए कॉन्फ़िगर किया जाता है:
- टेलीफ़ोनी (एनआईटीज़ेड)
- नेटवर्क (एनटीपी)
जांच करना
यह पुष्टि करने के लिए कि एनटीपी उपलब्ध न होने पर (मोबाइल डेटा और वाई-फ़ाई बंद होने पर), डिवाइस एनआईटीज़ेड का इस्तेमाल करता है या नहीं, यह तरीका अपनाएं:
- पक्का करें कि डीयूटी में काम करने वाला सिम कार्ड हो
- मोबाइल डेटा और वाई-फ़ाई बंद करें
- डिवाइस को फ़्लाइट मोड पर रखें, ताकि यह पक्का किया जा सके कि सेल रेडियो बंद है
- समय की अपने-आप पहचान करने की सुविधा बंद करें
- घड़ी को मैन्युअल तरीके से, आने वाले समय के लिए गलत वैल्यू पर सेट करें
- डिवाइस को रीबूट करें
- समय की अपने-आप पहचान करने की सुविधा चालू करें
- डिवाइस को फ़्लाइट मोड से हटाएं
एनआईटीज़ेड का सिग्नल मिलते ही, इन चरणों से सिस्टम की घड़ी में बदलाव होता है. यह देखने के लिए कि डिवाइस का समय कैसे सेट किया जाता है, यह कमांड चलाएं:
adb shell dumpsys time_detectorयह पुष्टि करने के लिए कि सिस्टम की घड़ी एनआईटीज़ेड का इस्तेमाल करती है, कमांड के आउटपुट में यह पुष्टि करें:
mEnvironment.isAutoTimeDetectionEnabled()की वैल्यूtrueहै.mEnvironment.autoOriginPriorities()में टाइम सोर्स की सूची शामिल है. इसमें सूची में ऊपर मौजूद सोर्स को, सूची में नीचे मौजूद सोर्स के मुकाबले ज़्यादा प्राथमिकता दी जाती है.Time change logसेक्शन से पता चलता है कि सिस्टम की घड़ी, टेलीफ़ोनी के सुझाव का इस्तेमाल करके सेट की गई है.Telephony suggestion historyसेक्शन में, समय के सुझाव शामिल हैं.Network suggestion historyसेक्शन खाली है.
Telephony suggestion history और Network suggestion history सेक्शन में मौजूद समय के सुझावों को, समय की सटीक जानकारी का सोर्स माना जाता है. अगर डिवाइस इंटरनेट से कनेक्ट है और उसमें सिम कार्ड है, तो सुझाव एनटीपी (नेटवर्क) और एनआईटीज़ेड (टेलीफ़ोनी) दोनों का इस्तेमाल करके जनरेट किए जाते हैं. इस टेस्ट केस में, सिर्फ़ Telephony suggestion history सेक्शन में सुझाव शामिल हैं, क्योंकि एनटीपी की सुविधा बंद है.
Time change log सेक्शन में, डिवाइस की सिस्टम घड़ी में किए गए बदलाव और इस्तेमाल किए गए सुझाव की जानकारी रिकॉर्ड की जाती है. सिस्टम की घड़ी, config_autoTimeSourcesPriority कुंजी में मौजूद प्राथमिकता वाली सूची में शामिल टाइम सोर्स के क्रम के हिसाब से सेट की जाती है. हालांकि, ज़्यादा प्राथमिकता वाले सोर्स से मिले सुझावों को अनदेखा किया जा सकता है. ऐसा तब होता है, जब सुझाव बहुत पुराना हो या अमान्य हो.
इसके अलावा, अगर सबसे ज़्यादा प्राथमिकता वाला मान्य सुझाव, डिवाइस की मौजूदा सिस्टम घड़ी के समय से कुछ सेकंड के अंदर मैच करता है, तो समय में बदलाव नहीं किया जाएगा.
इस टेस्ट केस में, जब तक सुझाव पुराने नहीं होते, तब तक सिस्टम की घड़ी, Telephony suggestion history से मिले किसी एक सुझाव का इस्तेमाल करके सेट की जाती है.
यहां एक ऐसे आउटपुट का उदाहरण दिया गया है जिसमें एनटीपी उपलब्ध न होने पर, डिवाइस एनआईटीज़ेड का इस्तेमाल करता है.
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}
जांच के दौरान मिले आउटपुट की तुलना करने के लिए, यहां एक सामान्य आउटपुट का उदाहरण दिया गया है. इसमें डिवाइस को एनटीपी और एनआईटीज़ेड, दोनों टाइम सोर्स से समय के सुझाव मिलते हैं.
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}