टेलीफोनी समय क्षेत्र का पता लगाना

Android 11 या उससे पहले के संस्करण चलाने वाले उपकरणों के लिए, AOSP में स्वचालित समय क्षेत्र का पता लगाना टेलीफोनी सबसिस्टम के संकेतों पर निर्भर करता है। टेलिफ़ोनी सबसिस्टम पर निर्भरता के कारण, Android 11 या उसके बाद के संस्करण पर स्वचालित समय क्षेत्र का पता लगाना टेलीफ़ोनी उपकरणों तक सीमित है।

जब टेलीफोनी टाइम ज़ोन डिटेक्शन उपलब्ध होता है, तो यह मोबाइल कंट्री कोड (MCC) और नेटवर्क आइडेंटिटी और टाइम ज़ोन (NITZ) सिग्नल का उपयोग करके काम करता है।

उदाहरण के लिए, फ़्रांस में एक उपकरण केवल आस-पास के सेल टावरों द्वारा रिपोर्ट किए गए एमसीसी के आधार पर समय क्षेत्र की पहचान कर सकता है। यह संभव है क्योंकि फ़्रांस एकल समय क्षेत्र का उपयोग करने के लिए जाना जाता है।

जब कोई देश अनेक समय क्षेत्रों का उपयोग करता है, तो समय क्षेत्र की पहचान करने के लिए केवल MCC ही पर्याप्त नहीं है। इन देशों के लिए, डिवाइस सही समय क्षेत्र की पहचान करने के लिए NITZ संकेतों का भी उपयोग करता है। यह दुनिया भर में कई जगहों पर अच्छी तरह से काम करता है लेकिन इसके लिए यह आवश्यक है कि NITZ सिग्नल उपलब्ध और सही दोनों हों और इसलिए यह वाहक पर निर्भर है।

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

टेलीफोनी समय क्षेत्र का पता लगाने की सीमा

यहां तक ​​कि सही एनआईटीजेड सिग्नल उपलब्ध होने के बावजूद, टेलीफोनी समय क्षेत्र का पता लगाना हर देश में हमेशा अच्छा काम नहीं करता है। ऐसा इसलिए है क्योंकि NITZ में केवल ऑफ़सेट और डेलाइट बचत जानकारी होती है, जो हमेशा विशिष्ट समय क्षेत्र की पहचान करने के लिए पर्याप्त नहीं होती हैं।

दुनिया में ऐसे कई स्थान हैं जहां इस समय क्षेत्र की समस्या हो सकती है। उदाहरण के लिए, अमेरिका में डेनवर कोलोराडो और फीनिक्स एरिजोना को सर्दियों के दौरान एनआईटीजेड संकेतों का उपयोग करके अलग नहीं किया जा सकता है, लेकिन अन्य मौसमों के दौरान कर सकते हैं। समान रूप से अतिव्यापी समय क्षेत्र वाले किसी भी स्थान को इस प्रकार की समस्या का अनुभव हो सकता है।

निम्न तालिका डेनवर और फीनिक्स के लिए एक उदाहरण के रूप में मौसम के आधार पर डिवाइस व्यवहार को तोड़ती है:

स्थान और मौसम एमसीसी या एनआईटीजेड से जानकारी पता लगाया गया समय क्षेत्र और व्यवहार
डैनवर कोलेराडो
सर्दी
समय: 1 जनवरी 2021 12:00:00
देश: यूएस
ऑफ़सेट: UTC-7, कोई डेलाइट सेविंग नहीं
दो ज़ोन आईडी मेल खाते हैं:
  • अमेरिका/डेनवर
  • अमेरिका/फीनिक्स

डिवाइस सही ढंग से अमेरिका/डेनवर पर सेट है।
फोइनिक्स, एरिज़ोना
सर्दी
समय: 1 जनवरी 2021 12:00:00
देश: यूएस
ऑफ़सेट: UTC-7, कोई डेलाइट सेविंग नहीं
दो ज़ोन आईडी मेल खाते हैं:
  • अमेरिका/डेनवर
  • अमेरिका/फीनिक्स

डिवाइस गलत तरीके से अमेरिका/डेनवर पर सेट है।
डैनवर कोलेराडो
ग्रीष्म ऋतु
समय: 1 जुलाई 2021 12:00:00
देश: यूएस
ऑफसेट: UTC-6, दिन के उजाले की बचत
एक जोन आईडी मेल खाता है:
  • अमेरिका/डेनवर

डिवाइस सही ढंग से अमेरिका/डेनवर पर सेट है।
फोइनिक्स, एरिज़ोना
ग्रीष्म ऋतु
समय: 1 जुलाई 2021 12:00:00
देश: यूएस
ऑफ़सेट: UTC-7, कोई डेलाइट सेविंग नहीं
एक जोन आईडी मेल खाता है:
  • अमेरिका/फीनिक्स

डिवाइस सही ढंग से अमेरिका/फ़ीनिक्स पर सेट है।

ऊपर दिए गए उदाहरणों से पता चलता है कि सर्दियों के दौरान, डेनवर या एरिज़ोना में Android उपकरणों को दो मिलान समय क्षेत्र आईडी में से एक का चयन करना चाहिए, जो कुछ उपकरणों के लिए गलत हो सकता है लेकिन फिर भी एक स्पष्ट रूप से सही स्थानीय समय प्रदर्शित करता है। डिवाइस घड़ी, कैलेंडर और अन्य ऐप अपेक्षित स्थानीय समय प्रदर्शित करते हैं, भले ही समय क्षेत्र आईडी गलत हो क्योंकि दोनों समय क्षेत्र आईडी सर्दियों के दौरान समान स्थानीय समय की गणना करते हैं।

हालांकि, वसंत ऋतु में जब डेनवर डेलाइट बचत समय देखता है और फीनिक्स नहीं करता है, तो कुछ डिवाइस अस्थायी रूप से गलत स्थानीय समय दिखा सकते हैं यदि वे उपयोगकर्ता के स्थान के लिए गलत समय क्षेत्र आईडी पर सेट हैं। जैसे ही डिवाइस को एक नया एनआईटीजेड सिग्नल प्राप्त होता है (विशेष रूप से, जिसमें "यूटीसी -7, कोई डेलाइट सेविंग्स" ऑफ़सेट जानकारी नहीं होती है), लेकिन इसमें कुछ समय लग सकता है और यह वाहक पर निर्भर है।

परिणामस्वरूप, कैलेंडर या अन्य ऐप जो सर्दियों से वसंत तक टाइम ज़ोन आईडी को स्टोर या ले जाते हैं, वे गलत स्थानीय समय प्रदर्शित और उपयोग कर सकते हैं जब तक कि संबंधित ऐप टाइम ज़ोन आईडी को अपडेट नहीं करते।

डिबगिंग और परीक्षण

निम्नलिखित खंड टेलीफोनी टाइम ज़ोन डिटेक्शन फीचर को डीबग करने और परीक्षण करने के लिए शेल कमांड का वर्णन करता है।

परीक्षण पर्यावरण सेटअप

टेस्टर आमतौर पर एक परीक्षण वातावरण का उपयोग एक परीक्षण या नकली टेलीफोनी सेल के साथ टेलीफोनी समय क्षेत्र पहचान व्यवहार की जांच करने के लिए करते हैं। परीक्षण सेल का उपयोग विभिन्न एमसीसी के साथ नेटवर्क का अनुकरण करने और उपकरणों को एनआईटीजेड सिग्नल भेजने और फिर उनके प्रभावों की निगरानी करने के लिए किया जा सकता है।

डिवाइस के लिए समय क्षेत्र का पता लगाने के लिए, NITZ सिग्नल की जानकारी सही होनी चाहिए, MCC के अनुरूप होनी चाहिए, और IANA TZDB (समय क्षेत्र नियम) की डिवाइस की कॉपी से मेल खाना चाहिए। NITZ सिग्नल जो MCC के साथ असंगत हैं, टेलीफोनी की उत्पत्ति को अनिश्चित बना देते हैं।

उदाहरण के लिए, यदि परीक्षण सेल द्वारा उपयोग किया जाने वाला एमसीसी यूएसए के लिए है, तो एनआईटीजेड सिग्नल में "सार्वभौमिक समय", ऑफ़सेट और डेलाइट सेविंग जानकारी होनी चाहिए जो यूएसए में कहीं के लिए सही हो।

com.android.phone सेवा के साथ इंटरैक्ट करना

यह सत्यापित करने के लिए कि डिवाइस को सही टेलीफ़ोनी समय क्षेत्र सुझाव प्राप्त हो रहे हैं, उपयोग करें:

adb shell dumpsys activity service \
    com.android.phone/com.android.phone.TelephonyDebugService

यह टेलीफोनी जानकारी को डंप कर देता है, जिसे एंड्रॉइड बग रिपोर्ट में भी पाया जा सकता है। एकाधिक सिम वाले उपकरणों पर, प्रत्येक सिम रेडियो के लिए जानकारी होती है।

टाइम ज़ोन लॉग सुझाव दिखाते हैं कि टेलीफोनी प्रक्रिया ने टाइम_ज़ोन_डिटेक्टर को भेजा है और सुझाव भेजने के कारण।

TimeServiceHelperImpl:
          SystemClock.elapsedRealtime()=11864061
          System.currentTimeMillis()=1620652067178
          Time Logs:
...

Time zone Logs:
    18602 / 2021-05-10T09:50:21.718Z - Suggesting time zone update:
    TelephonyTimeZoneSuggestion{mSlotIndex=0, mZoneId='null', mMatchType=0, mQuality=0,
    mDebugInfo=[getTimeZoneSuggestion: nitzSignal=TimestampedValue{mReferenceTimeMillis=14098,
    mValue=NitzData{mOriginalString=21/05/10,09:50:18+04,01, mZoneOffset=3600000,
    mDstOffset=3600000, mCurrentTimeMillis=1620640218000, mEmulatorHostTimeZone=null}},
    countryIsoCode=null, Detection
    reason=handleNitzReceived(TimestampedValue{mReferenceTimeMillis=14098,
    mValue=NitzData{mOriginalString=21/05/10,09:50:18+04,01, mZoneOffset=3600000,
    mDstOffset=3600000, mCurrentTimeMillis=1620640218000, mEmulatorHostTimeZone=null}})]}
    18831 / 2021-05-10T09:50:21.948Z - Suggesting time zone update:
    TelephonyTimeZoneSuggestion{mSlotIndex=0, mZoneId='Europe/London', mMatchType=3, mQuality=1,
    mDebugInfo=[findTimeZoneFromCountryAndNitz: countryIsoCode=gb,
    nitzSignal=TimestampedValue{mReferenceTimeMillis=14098,
    mValue=NitzData{mOriginalString=21/05/10,09:50:18+04,01, mZoneOffset=3600000,
    mDstOffset=3600000, mCurrentTimeMillis=1620640218000, mEmulatorHostTimeZone=null}},
    findTimeZoneFromCountryAndNitz: lookupResult=OffsetResult{mTimeZone(ID)=Europe/London,
    mIsOnlyMatch=true}, Detection reason=handleCountryDetected("gb")]}