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

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

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

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

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

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

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

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

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

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

स्थान और मौसम एमसीसी या एनआईटीजेड से जानकारी समय क्षेत्र और व्यवहार का पता लगाया गया
डेनवर, कोलोराडो
सर्दी
समय: 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, कोई डेलाइट बचत नहीं
एक ज़ोन आईडी मेल खाती है:
  • अमेरिका/फीनिक्स

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

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

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

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

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

निम्नलिखित अनुभाग डिबगिंग और टेलीफ़ोनी समय क्षेत्र पहचान सुविधा के परीक्षण के लिए शेल कमांड का वर्णन करता है।

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

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

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

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

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")]}