स्वचालित समय का पता लगाना

स्वचालित समय पहचान विभिन्न स्रोतों से समय सुझाव प्राप्त करती है, सर्वोत्तम विकल्प का चयन करती है, और फिर एंड्रॉइड में सिस्टम घड़ी को मिलान के लिए सेट करती है। पिछले एंड्रॉइड रिलीज़ ने दिनांक और समय निर्धारित करने के दो तरीके प्रदान किए, या तो प्रति उपयोगकर्ता मैन्युअल रूप से सेट किया गया या स्वचालित समय पहचान द्वारा, और इन विकल्पों में से एक द्वारा सेट किया गया:

  • telephony नेटवर्क पहचान और समय क्षेत्र (एनआईटीजेड) टेलीफोनी सिग्नल का उपयोग करता है।
  • network नेटवर्क टाइम प्रोटोकॉल (एनटीपी) टाइम सर्वर का उपयोग करता है।

प्रत्येक विकल्प के लिए बाहरी नेटवर्क से कनेक्शन की आवश्यकता होती है, जो एंड्रॉइड ऑटोमोटिव में हमेशा उपलब्ध नहीं होता है। उदाहरण के लिए, कुछ देशों में, कुछ कारों में अंतर्निहित टेलीफोनी नहीं हो सकती है। इसलिए, नेटवर्क कनेक्टिविटी अनुपलब्ध होने पर आपके उपयोग के लिए ग्लोबल सैटेलाइट नेविगेशन सिस्टम (जीएनएसएस) समय सिस्टम समय के स्रोत के रूप में प्रदान किया जाता है।

यह आगामी एंड्रॉइड रिलीज़ स्वचालित रूप से समय का पता लगाने और निर्धारित करने के लिए दो और विकल्प प्रदान करता है:

  • gnss ग्लोबल सैटेलाइट नेविगेशन सिस्टम (जीएनएसएस) का उपयोग करता है।
  • external VHAL प्रॉपर्टी या सिस्टम API का उपयोग करता है।

स्वचालित समय पहचान सक्षम करें

स्वचालित समय पहचान सक्षम करने के लिए, सेटिंग्स > दिनांक और समय > स्वचालित दिनांक और समय का चयन करना सुनिश्चित करें:

चित्र 1. स्वचालित दिनांक और समय चुनें

समय स्रोत कॉन्फ़िगर करें

यह निर्दिष्ट करने के लिए कि स्वचालित समय पहचान में कौन से समय स्रोतों को शामिल किया जाए, और प्राथमिकता जिसमें इन समय स्रोतों पर विचार किया जाना चाहिए, आपको डिवाइस की संसाधन कॉन्फ़िगरेशन फ़ाइल, core/res/res/values/config.xml को संशोधित करना होगा:

<!-- 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>telephony</item>
    <item>network</item>
</string-array>

इस उदाहरण में, स्वचालित समय पहचान में telephony और network पर विचार किया जाता है और telephony समय सुझावों को network समय सुझावों से पहले प्राथमिकता दी जाती है।

सामान्यतया, उच्च प्राथमिकता वाले स्रोत के सुझावों को नजरअंदाज कर दिया जाता है यदि सुझाव या तो अमान्य है या यदि सुझाव बहुत पुराना है। साथ ही, यदि सर्वोच्च प्राथमिकता वाला वैध सुझाव डिवाइस के वर्तमान सिस्टम क्लॉक समय से कई सेकंड के भीतर मेल खाता है (डिफ़ॉल्ट मान दो (2) सेकंड है), तो समय नहीं बदला जाएगा।

कम समय सीमा

एंड्रॉइड 12 समय सुझावों को मान्य करते समय उपयोग करने के लिए एक नई निचली समय सीमा प्रदान करता है। इस सुविधा से पहले, स्वचालित समय का पता लगाने से सुझाए गए आने वाले यूटीसी समय को मान्य नहीं किया जाएगा। इस सुविधा के साथ, निचली सीमा से पहले बीतने वाले समय को हटा दिया जाता है।

निचला बाउंड मान बिल्ड टाइमस्टैम्प से प्राप्त तिथि से निर्धारित होता है। यह इस सिद्धांत पर काम करता है कि सिस्टम छवि के निर्माण से पहले कोई वैध समय नहीं हो सकता। एंड्रॉइड ऊपरी सीमा लागू नहीं करता है।

जीएनएसएस समय सुझाव

gnss समय स्रोत एंड्रॉइड 12 के लिए नया है और जीपीएस सिग्नल द्वारा प्रदान किया गया है। यह उस समय के लिए एक विश्वसनीय स्रोत है जब telephony और network उपलब्ध नहीं हैं। यह विकल्प SystemServer में नए GnssTimeUpdateService में जोड़ा गया है जो निष्क्रिय रूप से स्थान अपडेट सुनता है। जब कोई वैध स्थान प्राप्त होता है, GnssTimeUpdateService TimeDetectorService को एक सुझाव देता है, जो तब निर्धारित करता है कि सिस्टम घड़ी को अपडेट किया जाना चाहिए या नहीं।

डिफ़ॉल्ट रूप से, gnss समय स्रोत एओएसपी में सक्षम नहीं है और इसलिए, भागीदारों द्वारा सक्षम किया जाना चाहिए:

<!-- 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>telephony</item>
    <item>network</item>
    <item>gnss</item>
</string-array>

<!-- Enables the GnssTimeUpdate service. This is the global switch for enabling Gnss time based
    suggestions to TimeDetector service. See also config_autoTimeSourcesPriority. -->
<bool name="config_enableGnssTimeUpdateService">true</bool>

इस सुविधा को सक्षम करने के लिए:

  1. config_enableGnssTimeUpdateService को अपडेट करें। config_enableGnssTimeUpdateService का मान true पर सेट होना चाहिए।
  2. config_autoTimeSourcesPriority को अपडेट करें। gnss config_autoTimeSourcesPriority के लिए आइटम सूची में जोड़ा जाना चाहिए। प्राथमिकता सूची में gnss की स्थिति अन्य स्रोतों से प्राप्त मूल्यों के संबंध में जीएनएसएस सुझावों को दी गई प्राथमिकता निर्धारित करती है।

सत्ता पर असर

GnssTimeUpdateService स्थान अपडेट को निष्क्रिय रूप से सुनता है, जिसका अर्थ है कि यह अतिरिक्त बिजली की खपत के लिए जीपीएस को कभी भी सक्रिय रूप से चालू नहीं करता है। परिणामस्वरूप, जीएनएसएस स्रोत सक्षम होने पर बिजली की खपत नगण्य होती है। इसका मतलब यह भी है कि जब तक सिस्टम में कोई अन्य ऐप या सेवा सक्रिय रूप से स्थान अपडेट का अनुरोध नहीं करती है, GnssTimeUpdateService स्थान अपडेट नहीं मिलता है और GNSS समय का सुझाव नहीं मिलता है।

परिक्षण

संगतता परीक्षण सूट (सीटीएस)

यह सत्यापित करने के लिए एक सीटीएस परीक्षण प्रदान किया जाता है कि जीएनएसएस द्वारा प्रदान किया गया समय उपलब्ध है। विवरण के लिए, LocationShellCommand.java देखें।

इकाई परीक्षण

निम्नलिखित फ़ाइल में बुनियादी इकाई परीक्षण देखें:

atest frameworks/base/services/tests/servicestests/src/com/android/server/timedetector/GnssTimeUpdateServiceTest.java

मैनुअल परीक्षण

इस सुविधा का परीक्षण करने के लिए, LocationShellCommand.java में नए कमांड जोड़े गए हैं। परीक्षण प्रदाताओं को जोड़ने के लिए इन आदेशों का उपयोग करें जिनके साथ आप एक स्थान और संबंधित जीएनएसएस समय निर्दिष्ट कर सकते हैं। GnssTimeUpdateService इन स्थान अपडेट को सुनता है, और समय-समय पर सुझाव देता है।

नोट: इन कमांड का इंटरफ़ेस रिलीज़ के बीच बदल सकता है।

# Enable Master Location Switch in the foreground user (usually user 10 on automotive).
# If you just flashed, this can be done through Setup Wizard.
adb shell cmd location set-location-enabled true --user 10

# Add GPS test provider (this usually fails the first time and will throw a SecurityException
# with "android from <some-uid> not allowed to perform MOCK_LOCATION".)
adb shell cmd location providers add-test-provider gps

# Enable mock location permissions for previous UID
adb shell appops set <uid printed in previous error> android:mock_location allow

# Add GPS test provider (Should work with no errors.)
adb shell cmd location providers add-test-provider gps

# Enable GPS test provider
adb shell cmd location providers set-test-provider-enabled gps true

# Set location with time (time can't be earlier than the limit set by the lower bound.)
adb shell cmd location providers set-test-provider-location gps --location <LATITUDE>,<LONGITUDE> --time <TIME>

बाहरी समय सुझाव

बाहरी समय सुझाव एंड्रॉइड को स्वचालित समय सुझाव प्रदान करने का एक और तरीका है। यह नया विकल्प आपको एंड्रॉइड को पूरी तरह से अनुकूलित समय सुझाव प्रदान करने में सक्षम बनाता है, जो विभिन्न ईसीयू से उत्पन्न हो सकता है, जो बदले में, वास्तविक समय घड़ी, जीएनएसएस, एनआईटीजेड, या किसी अन्य समय स्रोत के संयोजन का उपयोग कर सकता है।

external समय सुझावों के रूप में विचार करने के लिए Android 12 में निम्नलिखित सुझाव उपलब्ध हैं:

  • वीएचएएल गुण। EPOCH_TIME नामक एक नई VHAL संपत्ति प्रदान की गई है। यह गुण 1/1/1970 यूटीसी के बाद से बीत चुके मिलीसेकंड की संख्या को दर्शाता है। नए सिस्टम समय का सुझाव देने के लिए इसका मान Android TimeManager को भेजा जा सकता है। इस संपत्ति को अद्यतन करने वाला एक नमूना वीएचएएल कार्यान्वयन नीचे संदर्भ कार्यान्वयन में प्रदान किया गया है।
  • सिस्टम एपीआई. सिस्टम को बाहरी समय सुझाव प्रदान करने के लिए suggestExternalTime() नामक एक नई विधि टाइममैनेजर में उपलब्ध है। यदि सिस्टम को बाहरी समय सुझावों को ध्यान में रखने के लिए कॉन्फ़िगर किया गया है (कॉन्फिगरेशन फ़ाइल में config_autoTimeSourcesPriority का उपयोग करके), यदि कोई उच्च प्राथमिकता वाले समय सुझाव उपलब्ध नहीं हैं, तो इस पद्धति को पारित टाइमस्टैम्प का उपयोग सिस्टम समय निर्धारित करने के लिए किया जाता है।

आप नीचे बताए अनुसार बाह्य समय समाधान लागू कर सकते हैं:

  1. संसाधन कॉन्फ़िगरेशन फ़ाइल ( core/res/res/values/config.xml ) को अपडेट करें और फिर config_autoTimeSourcesPriority में external मान जोड़ें:
    <string-array name="config_autoTimeSourcesPriority>
            <item>external</item>
            <item>gnss</item>
    </string-array>
    

    ऐसा करने से एंड्रॉइड को सिस्टम घड़ी सेट करते समय बाहरी समय सुझावों को सर्वोच्च प्राथमिकता देने का निर्देश मिलता है। वाहन पर हार्डवेयर नई EPOCH_TIME VHAL संपत्ति के लिए एक टाइमस्टैम्प सुझाव लिखता है।

  2. विक्रेता द्वारा प्रदत्त ऐप इस प्रॉपर्टी को पढ़ता है और TimeManager.suggestExternal() पर कॉल करता है। एंड्रॉइड तब दिए गए टाइमस्टैम्प को नए सिस्टम क्लॉक वैल्यू के रूप में उपयोग कर सकता है।