টেলিফোনি টাইম জোন সনাক্তকরণ

অ্যান্ড্রয়েড ১১ বা তার নিম্ন সংস্করণে চালিত ডিভাইসগুলির জন্য, অ্যান্ড্রয়েড ওপেন সোর্স প্রজেক্ট (AOSP)-এর স্বয়ংক্রিয় টাইম জোন শনাক্তকরণ টেলিফোনি সাবসিস্টেম থেকে প্রাপ্ত সংকেতের উপর নির্ভর করে। টেলিফোনি সাবসিস্টেমের উপর নির্ভরশীলতার কারণে, অ্যান্ড্রয়েড ১১ বা তার নিম্ন সংস্করণে স্বয়ংক্রিয় টাইম জোন শনাক্তকরণ শুধুমাত্র টেলিফোনি ডিভাইসগুলির মধ্যেই সীমাবদ্ধ।

যখন টেলিফোনি টাইম জোন শনাক্তকরণ উপলব্ধ থাকে, তখন এটি মোবাইল কান্ট্রি কোড (MCC) এবং নেটওয়ার্ক আইডেন্টিটি অ্যান্ড টাইম জোন (NITZ) সিগন্যাল ব্যবহার করে কাজ করে।

উদাহরণস্বরূপ, বেলজিয়ামের একটি ডিভাইস শুধুমাত্র নিকটবর্তী সেল টাওয়ারগুলো থেকে প্রাপ্ত এমসিসি (MCC)-এর উপর ভিত্তি করে সময় অঞ্চলটি শনাক্ত করতে পারে। এটি সম্ভব কারণ বেলজিয়ামে একটি একক সময় অঞ্চল ব্যবহৃত হয়।

যখন কোনো দেশ একাধিক টাইম জোন ব্যবহার করে, তখন শুধুমাত্র এমসিসি (MCC) টাইম জোন শনাক্ত করার জন্য যথেষ্ট নয়। এই দেশগুলোর ক্ষেত্রে, ডিভাইসটি সঠিক টাইম জোন শনাক্ত করতে এনআইটিজেড (NITZ) সিগন্যালও ব্যবহার করে। এটি বিশ্বের অনেক জায়গায় ভালোভাবে কাজ করে, কিন্তু এর জন্য এনআইটিজেড সিগন্যাল সহজলভ্য ও সঠিক হওয়া প্রয়োজন এবং একারণে এটি ক্যারিয়ারগুলোর উপর নির্ভরশীল।

টেলিফোনি টাইম জোন ডিটেকশন একটি প্যাসিভ ডিটেক্টর। এটি সব সময় চালু থাকে, তাই সক্রিয় time_zone_detector অ্যালগরিদমটি টেলিফোনি না হলেও প্রায়শই টেলিফোনির পরামর্শ দেওয়া হয়।

টেলিফোনি সময় অঞ্চল সনাক্তকরণের সীমাবদ্ধতা

সঠিক NITZ সিগন্যাল উপলব্ধ থাকলেও, টেলিফোনি টাইম জোন শনাক্তকরণ সব দেশে সবসময় ভালোভাবে কাজ করে না। এর কারণ হলো, NITZ-এ শুধুমাত্র অফসেট এবং ডেলাইট সেভিং-এর তথ্য থাকে, যা একটি টাইম জোনকে স্বতন্ত্রভাবে শনাক্ত করার জন্য সবসময় যথেষ্ট নয়।

বিশ্বে এমন অনেক জায়গা আছে যেখানে এই টাইম জোনের সমস্যা দেখা দিতে পারে। উদাহরণস্বরূপ, মার্কিন যুক্তরাষ্ট্রের কলোরাডোর ডেনভার এবং অ্যারিজোনার ফিনিক্সকে শীতকালে NITZ সিগন্যাল ব্যবহার করে আলাদা করা যায় না, কিন্তু অন্যান্য ঋতুতে তা করা যায়। একইভাবে ওভারল্যাপ হওয়া টাইম জোনযুক্ত যেকোনো স্থানেই এই ধরনের সমস্যা দেখা দিতে পারে।

উদাহরণস্বরূপ, নিচের সারণিতে ডেনভার এবং ফিনিক্সের ক্ষেত্রে মৌসুম অনুযায়ী ডিভাইসের আচরণ বিশদভাবে দেখানো হয়েছে:

অবস্থান এবং ঋতু MCC বা NITZ থেকে প্রাপ্ত তথ্য শনাক্তকৃত সময় অঞ্চল এবং আচরণ
ডেনভার, কলোরাডো
শীতকাল
সময়: ১লা জানুয়ারি ২০২১ ১২:০০:০০
দেশ: মার্কিন যুক্তরাষ্ট্র
অফসেট: UTC-7, দিবালোক সংরক্ষণ নেই
দুটি জোন আইডি মিলে গেছে:
  • আমেরিকা/ডেনভার
  • আমেরিকা/ফিনিক্স

ডিভাইসটি আমেরিকা/ডেনভারে সঠিকভাবে সেট করা আছে।
ফিনিক্স, অ্যারিজোনা
শীতকাল
সময়: ১লা জানুয়ারি ২০২১ ১২:০০:০০
দেশ: মার্কিন যুক্তরাষ্ট্র
অফসেট: UTC-7, দিবালোক সংরক্ষণ নেই
দুটি জোন আইডি মিলে গেছে:
  • আমেরিকা/ডেনভার
  • আমেরিকা/ফিনিক্স

ডিভাইসটি ভুলবশত আমেরিকা/ডেনভারে সেট করা আছে।
ডেনভার, কলোরাডো
গ্রীষ্মকাল
সময়: ১লা জুলাই ২০২১ ১২:০০:০০
দেশ: মার্কিন যুক্তরাষ্ট্র
অফসেট: UTC-6, দিবালোক সংরক্ষণ
একটি জোন আইডি মিলেছে:
  • আমেরিকা/ডেনভার

ডিভাইসটি আমেরিকা/ডেনভারে সঠিকভাবে সেট করা আছে।
ফিনিক্স, অ্যারিজোনা
গ্রীষ্মকাল
সময়: ১লা জুলাই ২০২১ ১২:০০:০০
দেশ: মার্কিন যুক্তরাষ্ট্র
অফসেট: UTC-7, দিবালোক সংরক্ষণ নেই
একটি জোন আইডি মিলেছে:
  • আমেরিকা/ফিনিক্স

ডিভাইসটি আমেরিকা/ফিনিক্স-এ সঠিকভাবে সেট করা আছে।

সারণির উদাহরণগুলো থেকে দেখা যায় যে, শীতকালে ডেনভার বা অ্যারিজোনার অ্যান্ড্রয়েড ডিভাইসগুলোকে দুটি মিলে যাওয়া টাইম জোন আইডির মধ্যে একটি বেছে নিতে হয়, যা কিছু ডিভাইসের জন্য ভুল হতে পারে কিন্তু তারপরেও আপাতদৃষ্টিতে সঠিক স্থানীয় সময় প্রদর্শন করে। টাইম জোন আইডি ভুল হলেও ডিভাইসের ঘড়ি, ক্যালেন্ডার এবং অন্যান্য অ্যাপগুলো প্রত্যাশিত স্থানীয় সময় দেখায়, কারণ শীতকালে উভয় টাইম জোন আইডিই একই স্থানীয় সময় গণনা করে।

তবে, বসন্তকালে যখন ডেনভার ডেলাইট সেভিং টাইম অনুসরণ করে এবং ফিনিক্স করে না, তখন ব্যবহারকারীর অবস্থানের জন্য ভুল টাইম জোন আইডিতে সেট করা থাকলে কিছু ডিভাইস সাময়িকভাবে ভুল স্থানীয় সময় দেখাতে পারে। ডিভাইসটি একটি নতুন NITZ সিগন্যাল (বিশেষত, যেটিতে "UTC-7, no daylight saving" অফসেট তথ্য থাকে) পাওয়ার সাথে সাথেই এটি ঠিক হয়ে যায়, কিন্তু এতে কিছুটা সময় লাগতে পারে এবং এটি ক্যারিয়ারের উপর নির্ভরশীল।

এর ফলে, ক্যালেন্ডার বা অন্যান্য অ্যাপ যেগুলো শীতকাল থেকে বসন্তকালে টাইম জোন আইডি সংরক্ষণ করে বা বহন করে, সেগুলো সংশ্লিষ্ট অ্যাপগুলো টাইম জোন আইডি আপডেট না করা পর্যন্ত ভুল স্থানীয় সময় প্রদর্শন ও ব্যবহার করতে পারে।

ডিবাগ এবং পরীক্ষা

নিম্নলিখিত অংশে টেলিফোনি টাইম জোন শনাক্তকরণ বৈশিষ্ট্যটি ডিবাগ এবং পরীক্ষা করার জন্য শেল কমান্ডগুলো বর্ণনা করা হয়েছে।

পরীক্ষার পরিবেশ সেটআপ

পরীক্ষকরা সাধারণত টেলিফোনি টাইম জোন শনাক্তকরণের আচরণ পরীক্ষা করার জন্য একটি টেস্ট বা সিমুলেটেড টেলিফোনি সেল সহ একটি পরীক্ষামূলক পরিবেশ ব্যবহার করেন। এই টেস্ট সেলটি বিভিন্ন MCC সহ নেটওয়ার্ক সিমুলেট করতে এবং ডিভাইসগুলিতে NITZ সিগন্যাল পাঠিয়ে সেগুলোর প্রভাব পর্যবেক্ষণ করতে ব্যবহার করা যেতে পারে।

ডিভাইসটির টাইম জোন শনাক্ত করার জন্য, NITZ সিগন্যালের তথ্য অবশ্যই সঠিক, MCC-এর সাথে সামঞ্জস্যপূর্ণ এবং ডিভাইসের কাছে থাকা IANA TZDB (টাইম জোন নিয়মাবলী)-এর কপির সাথে মিলতে হবে। MCC-এর সাথে অসামঞ্জস্যপূর্ণ NITZ সিগন্যালের কারণে টেলিফোনি অ্যালগরিদম অনিশ্চিত হয়ে পড়ে।

উদাহরণস্বরূপ, যদি টেস্ট সেল দ্বারা ব্যবহৃত MCC মার্কিন যুক্তরাষ্ট্রের জন্য হয়, তাহলে NITZ সিগন্যালে অবশ্যই এমন একটি UTC, অফসেট এবং ডেলাইট সেভিং তথ্য থাকতে হবে যা মার্কিন যুক্তরাষ্ট্রের কোনো একটি স্থানের জন্য সঠিক।

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