অ্যান্ড্রয়েড 11 বা তার কম সংস্করণে চলমান ডিভাইসগুলির জন্য, AOSP-এ স্বয়ংক্রিয় সময় অঞ্চল সনাক্তকরণ টেলিফোনি সাবসিস্টেম থেকে সংকেতগুলির উপর নির্ভর করে। টেলিফোনি সাবসিস্টেমের উপর নির্ভরতার কারণে, Android 11 বা তার চেয়ে কম সময়ে স্বয়ংক্রিয় টাইম জোন সনাক্তকরণ টেলিফোনি ডিভাইসে সীমাবদ্ধ।
টেলিফোনি টাইম জোন সনাক্তকরণ উপলব্ধ হলে, এটি মোবাইল কান্ট্রি কোড (MCC) এবং নেটওয়ার্ক আইডেন্টিটি এবং টাইম জোন (NITZ) সংকেত ব্যবহার করে কাজ করে৷
উদাহরণস্বরূপ, ফ্রান্সের একটি ডিভাইস শুধুমাত্র কাছাকাছি সেল টাওয়ার দ্বারা রিপোর্ট করা MCC এর উপর ভিত্তি করে টাইম জোন সনাক্ত করতে পারে৷ এটি সম্ভব কারণ ফ্রান্স একটি একক সময় অঞ্চল ব্যবহার করতে পরিচিত।
যখন একটি দেশ একাধিক টাইম জোন ব্যবহার করে, তখন শুধুমাত্র MCCই টাইম জোন চিহ্নিত করার জন্য যথেষ্ট নয়। এই দেশগুলির জন্য, ডিভাইসটি সঠিক সময় অঞ্চল সনাক্ত করতে NITZ সংকেতও ব্যবহার করে। এটি বিশ্বের অনেক জায়গায় ভাল কাজ করে তবে এটির জন্য প্রয়োজন যে NITZ সংকেত উভয়ই উপলব্ধ এবং সঠিক এবং তাই এটি ক্যারিয়ারের উপর নির্ভরশীল।
টেলিফোনি টাইম জোন সনাক্তকরণ একটি প্যাসিভ ডিটেক্টর। এটি সর্বদা চলে এবং তাই টেলিফোনি পরামর্শগুলি প্রায়ই তৈরি করা হয় এমনকি যখন সক্রিয় time_zone_detector
অ্যালগরিদম বর্তমানে টেলিফোনি নয়।
টেলিফোনি সময় অঞ্চল সনাক্তকরণের সীমাবদ্ধতা
এমনকি সঠিক NITZ সংকেত উপলব্ধ থাকলেও, টেলিফোনি টাইম জোন সনাক্তকরণ সর্বদা প্রতিটি দেশে ভাল কাজ করে না। এর কারণ হল NITZ-এ শুধুমাত্র অফসেট এবং দিবালোক সঞ্চয় সংক্রান্ত তথ্য থাকে, যা সর্বদা একটি সময় অঞ্চলকে স্বতন্ত্রভাবে চিহ্নিত করার জন্য যথেষ্ট নয়।
পৃথিবীতে এমন অনেক জায়গা আছে যেখানে এই টাইম জোন সমস্যা হতে পারে। উদাহরণস্বরূপ, মার্কিন যুক্তরাষ্ট্রের ডেনভার কলোরাডো এবং ফিনিক্স অ্যারিজোনাকে শীতকালে NITZ সংকেত ব্যবহার করে আলাদা করা যায় না, তবে অন্যান্য ঋতুতেও করা যায়। একইভাবে ওভারল্যাপিং টাইম জোন সহ যেকোনো অবস্থানে এই ধরনের সমস্যা হতে পারে।
নিম্নলিখিত টেবিলটি একটি উদাহরণ হিসাবে ডেনভার এবং ফিনিক্সের সিজনের উপর নির্ভর করে ডিভাইসের আচরণকে ভেঙে দেয়:
অবস্থান এবং ঋতু | MCC বা 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, কোন ডেলাইট সেভিংস নেই | এক জোন আইডি মেলে:
ডিভাইসটি সঠিকভাবে আমেরিকা/ফিনিক্সে সেট করা আছে। |
উপরের উদাহরণগুলি দেখায় যে শীতকালে, ডেনভার বা অ্যারিজোনার অ্যান্ড্রয়েড ডিভাইসগুলিকে অবশ্যই দুটি মিলে যাওয়া টাইম জোন আইডিগুলির মধ্যে একটি বেছে নিতে হবে, যা কিছু ডিভাইসের জন্য ভুল হতে পারে তবে এখনও একটি আপাতভাবে সঠিক স্থানীয় সময় প্রদর্শন করে৷ ডিভাইস ঘড়ি, ক্যালেন্ডার এবং অন্যান্য অ্যাপ্লিকেশানগুলি প্রত্যাশিত স্থানীয় সময় প্রদর্শন করে এমনকি যদি সময় অঞ্চল আইডি ভুল হয় কারণ উভয় সময় অঞ্চল আইডি শীতকালে একই স্থানীয় সময় গণনা করে৷
যাইহোক, বসন্তে যখন ডেনভার দিবালোক সংরক্ষণের সময় পর্যবেক্ষণ করে এবং ফিনিক্স তা করে না, কিছু ডিভাইস সাময়িকভাবে ভুল স্থানীয় সময় দেখাতে পারে যদি তারা ব্যবহারকারীর অবস্থানের জন্য ভুল সময় অঞ্চল আইডিতে সেট করা থাকে। ডিভাইসটি একটি নতুন NITZ সংকেত পাওয়ার সাথে সাথে এটি সংশোধন করা হয় (বিশেষত, "UTC-7, কোন ডেলাইট সেভিংস" অফসেট তথ্য ধারণ করে), তবে এটি কিছু সময় নিতে পারে এবং এটি ক্যারিয়ারের উপর নির্ভরশীল।
ফলস্বরূপ, ক্যালেন্ডার বা অন্যান্য অ্যাপ্লিকেশানগুলি যেগুলি শীত থেকে বসন্ত পর্যন্ত টাইম জোন আইডি সংরক্ষণ করে বা বহন করে, প্রাসঙ্গিক অ্যাপগুলি টাইম জোন আইডি আপডেট না করা পর্যন্ত ভুল স্থানীয় সময় প্রদর্শন এবং ব্যবহার করতে পারে৷
ডিবাগিং এবং টেস্টিং
নিম্নলিখিত বিভাগে টেলিফোনি টাইম জোন সনাক্তকরণ বৈশিষ্ট্য ডিবাগিং এবং পরীক্ষা করার জন্য শেল কমান্ড বর্ণনা করা হয়েছে।
পরীক্ষা পরিবেশ সেটআপ
পরীক্ষকরা সাধারণত টেলিফোনি টাইম জোন সনাক্তকরণ আচরণ পরীক্ষা করার জন্য একটি পরীক্ষা বা সিমুলেটেড টেলিফোনি সেল সহ একটি পরীক্ষার পরিবেশ ব্যবহার করে। টেস্ট সেলটি বিভিন্ন MCC সহ নেটওয়ার্ক অনুকরণ করতে এবং ডিভাইসগুলিতে NITZ সংকেত পাঠাতে এবং তারপর তাদের প্রভাবগুলি নিরীক্ষণ করতে ব্যবহার করা যেতে পারে।
ডিভাইসটি সময় অঞ্চল সনাক্ত করতে, NITZ সংকেত তথ্য সঠিক হতে হবে, MCC-এর সাথে সামঞ্জস্যপূর্ণ, এবং IANA TZDB (টাইম জোন নিয়ম) এর ডিভাইসের অনুলিপির সাথে মেলে। NITZ সংকেতগুলি যা MCC-এর সাথে অসামঞ্জস্যপূর্ণ তা টেলিফোনি অ্যালগরিদমকে অনিশ্চিত করে তোলে৷
উদাহরণ স্বরূপ, যদি পরীক্ষা কক্ষ দ্বারা ব্যবহৃত MCC USA-এর জন্য হয়, NITZ সংকেতটিতে অবশ্যই একটি "সর্বজনীন সময়", অফসেট এবং দিবালোক সঞ্চয় সংক্রান্ত তথ্য থাকতে হবে যা USA-এর কোথাও সঠিক।
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")]}