সময় উৎস অগ্রাধিকার

অ্যান্ড্রয়েড ফ্রেমওয়ার্ক সময় সিঙ্ক্রোনাইজেশনের জন্য বিভিন্ন সময় উত্স ব্যবহার করে। এই পৃষ্ঠাটি নেটওয়ার্ক টাইম প্রোটোকল (এনটিপি) এবং নেটওয়ার্ক আইডেন্টিটি এবং টাইম জোন (এনআইটিজেড) স্বয়ংক্রিয় সময় উত্সগুলিতে ফোকাস করে৷ অ্যান্ড্রয়েড 12 বা উচ্চতর সংস্করণে ডিফল্টরূপে, ফ্রেমওয়ার্ক NTP-কে NITZ-এর তুলনায় সময়ের উৎস হিসাবে অগ্রাধিকার দেয় কারণ NTP NITZ-এর চেয়ে বেশি নির্ভুল এবং নির্ভরযোগ্য। NTP উপলব্ধ নয় এমন পরিস্থিতিতে, ফ্রেমওয়ার্ক NITZ-এ ফিরে আসে। এটি প্ল্যাটফর্মের পূর্ববর্তী সংস্করণগুলি থেকে ডিফল্ট অগ্রাধিকারের একটি বিপরীত। ডিফল্টরূপে Android 11 এবং তার চেয়ে কম সময়ে, ফ্রেমওয়ার্ক NITZ-কে NTP-এর চেয়ে অগ্রাধিকার দেয়।

এই পরিবর্তন সম্পর্কে আরও বিশদ বিবরণের জন্য, নিম্নলিখিত AOSP প্যাচগুলি দেখুন: 1563678 , 1513323

সময়ের উৎস অগ্রাধিকার কনফিগার করা হচ্ছে

নির্দিষ্ট অ্যান্ড্রয়েড সংস্করণের জন্য কোন সময় উৎসটি ডিফল্টভাবে অগ্রাধিকার নেয় তা কনফিগার করতে, বিল্ড টাইমে frameworks/base/core/res/res/values/config.xmlconfig_autoTimeSourcesPriority কী কনফিগার করুন। তালিকায় উচ্চতর সময় উত্স থেকে সময় প্রস্তাবনাগুলি তালিকায় কম উত্সগুলির চেয়ে অগ্রাধিকার পায়৷

অ্যান্ড্রয়েড টাইম সোর্স যা কনফিগার করা যায় TimeDetectorStrategy.java এ পাওয়া যায়। নিম্নলিখিত উত্সগুলি ডিফল্টরূপে ব্যবহারের জন্য কনফিগার করা হয়েছে:

  • টেলিফোনি (NITZ)
  • নেটওয়ার্ক (NTP)

পরীক্ষামূলক

NTP উপলব্ধ না থাকলে ডিভাইসটি NITZ ব্যবহার করে তা যাচাই করতে (যখন মোবাইল ডেটা এবং Wi-Fi নিষ্ক্রিয় থাকে), নিম্নলিখিতগুলি করুন:

  1. নিশ্চিত করুন যে DUT-তে একটি কার্যকরী সিম আছে
  2. মোবাইল ডেটা এবং ওয়াই-ফাই বন্ধ করুন
  3. সেল রেডিও বন্ধ আছে তা নিশ্চিত করতে ডিভাইসটিকে বিমান মোডে রাখুন
  4. স্বয়ংক্রিয় সময় সনাক্তকরণ বন্ধ করুন
  5. ভবিষ্যতে একটি ভুল সময়ের মান ম্যানুয়ালি ঘড়ি সেট করুন
  6. ডিভাইসটি রিবুট করুন
  7. স্বয়ংক্রিয় সময় সনাক্তকরণ চালু করুন
  8. ডিভাইসটিকে বিমান মোড থেকে বের করে নিন

এই পদক্ষেপগুলি একটি NITZ সংকেত পাওয়ার সাথে সাথে সিস্টেম ঘড়িতে পরিবর্তন আনে। ডিভাইসের সময় কীভাবে সেট করা হয়েছে তা পরীক্ষা করতে, নিম্নলিখিত কমান্ডটি চালান:

adb shell dumpsys time_detector

সিস্টেম ঘড়ি NITZ ব্যবহার করে তা যাচাই করতে, কমান্ড আউটপুটে নিম্নলিখিতটি নিশ্চিত করুন:

  • mEnvironment.isAutoTimeDetectionEnabled() true
  • mEnvironment.autoOriginPriorities() সময় উত্সগুলির একটি তালিকা রয়েছে যার তালিকায় উচ্চতর উত্সগুলি তালিকার নীচের উত্সগুলির চেয়ে অগ্রাধিকার দেয়৷
  • Time change log বিভাগ দেখায় যে সিস্টেম ঘড়ি একটি টেলিফোনি পরামর্শ ব্যবহার করে সেট করা হয়েছে।
  • Telephony suggestion history বিভাগে সময় পরামর্শ রয়েছে।
  • Network suggestion history বিভাগটি খালি।

Telephony suggestion history এবং Network suggestion history বিভাগে সময় সাজেশনকে সময়ের জন্য সত্যের উৎস হিসেবে বিবেচনা করা হয়। যদি ডিভাইসটি ইন্টারনেটের সাথে সংযুক্ত থাকে এবং একটি সিম কার্ড থাকে, তাহলে NTP (নেটওয়ার্ক) এবং NITZ (টেলিফোনি) উভয় ব্যবহার করে পরামর্শ তৈরি করা হয়। এই পরীক্ষার ক্ষেত্রে, শুধুমাত্র Telephony suggestion history বিভাগে পরামর্শ রয়েছে কারণ NTP অক্ষম করা হয়েছে।

Time change log সেকশনটি ডিভাইসের সিস্টেম ঘড়িতে করা পরিবর্তন এবং ব্যবহৃত সাজেশন রেকর্ড করে। সিস্টেম ঘড়ি config_autoTimeSourcesPriority কী-তে অগ্রাধিকার তালিকার সময় উত্সের ক্রম অনুসারে সেট করা হয়। যাইহোক, একটি উচ্চ অগ্রাধিকার উৎস থেকে পরামর্শ উপেক্ষা করা হতে পারে যদি পরামর্শটি খুব পুরানো বা অবৈধ হয়। এছাড়াও, যদি সর্বোচ্চ অগ্রাধিকারের বৈধ পরামর্শটি ডিভাইসের বর্তমান সিস্টেম ঘড়ির সময়ের সাথে কয়েক সেকেন্ডের মধ্যে মেলে তবে সময় পরিবর্তন করা হবে না। এই পরীক্ষার ক্ষেত্রে, যতক্ষণ পর্যন্ত পরামর্শগুলি পুরানো না হয়, সিস্টেম ঘড়িটি Telephony suggestion history একটি পরামর্শ ব্যবহার করে সেট করা হয়৷

নিম্নলিখিত একটি আউটপুটের একটি উদাহরণ যেখানে NTP অনুপলব্ধ হলে ডিভাইসটি NITZ ব্যবহার করে ফিরে আসে।

TimeDetectorStrategy:
  mLastAutoSystemClockTimeSet=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000}
  mEnvironment.isAutoTimeDetectionEnabled()=true
  mEnvironment.elapsedRealtimeMillis()=73059
  mEnvironment.systemClockMillis()=1614186767818
  mEnvironment.systemClockUpdateThresholdMillis()=2000
  mEnvironment.autoTimeLowerBound()=2021-02-24T15:44:15Z(1614181455000)
  mEnvironment.autoOriginPriorities()=[network,telephony]
  Time change log:
    66261 / 2021-02-24T17:12:41.020Z - Set system clock using time=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000} cause=Found good telephony suggestion., bestTelephonySuggestion=TelephonyTimeSuggestion{mSlotIndex='0', mUtcTime=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000}, mDebugInfo=[Sending new time suggestion nitzSignal=TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}}, reason=handleNitzReceived(TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}})]}, detectionReason=New telephony time suggested. timeSuggestion=TelephonyTimeSuggestion{mSlotIndex='0', mUtcTime=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000}, mDebugInfo=[Sending new time suggestion nitzSignal=TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}}, reason=handleNitzReceived(TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}})]} elapsedRealtimeMillis=66259 newSystemClockMillis=1614186761019
  Telephony suggestion history:
    key idx: 0=0
    val idx: 0=TelephonyTimeSuggestion{mSlotIndex='0', mUtcTime=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000}, mDebugInfo=[Sending new time suggestion nitzSignal=TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}}, reason=handleNitzReceived(TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}})]}
      Historic values=[
        0@PT1M6.258S: TelephonyTimeSuggestion{mSlotIndex='0', mUtcTime=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000}, mDebugInfo=[Sending new time suggestion nitzSignal=TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}}, reason=handleNitzReceived(TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}})]}
      ]
  Network suggestion history:
    {Empty}
  Gnss suggestion history:
    {Empty}
  External suggestion history:
    {Empty}

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

TimeDetectorStrategy:
  mLastAutoSystemClockTimeSet=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000}
  mEnvironment.isAutoTimeDetectionEnabled()=true
  mEnvironment.elapsedRealtimeMillis()=302926
  mEnvironment.systemClockMillis()=1614186997685
  mEnvironment.systemClockUpdateThresholdMillis()=2000
  mEnvironment.autoTimeLowerBound()=2021-02-24T15:44:15Z(1614181455000)
  mEnvironment.autoOriginPriorities()=[network,telephony]
  Time change log:
    66261 / 2021-02-24T17:12:41.020Z - Set system clock using time=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000} cause=Found good telephony suggestion., bestTelephonySuggestion=TelephonyTimeSuggestion{mSlotIndex='0', mUtcTime=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000}, mDebugInfo=[Sending new time suggestion nitzSignal=TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}}, reason=handleNitzReceived(TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}})]}, detectionReason=New telephony time suggested. timeSuggestion=TelephonyTimeSuggestion{mSlotIndex='0', mUtcTime=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000}, mDebugInfo=[Sending new time suggestion nitzSignal=TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}}, reason=handleNitzReceived(TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}})]} elapsedRealtimeMillis=66259 newSystemClockMillis=1614186761019
  Telephony suggestion history:
    key idx: 0=0
    val idx: 0=TelephonyTimeSuggestion{mSlotIndex='0', mUtcTime=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000}, mDebugInfo=[Sending new time suggestion nitzSignal=TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}}, reason=handleNitzReceived(TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}})]}
      Historic values=[
        0@PT1M6.258S: TelephonyTimeSuggestion{mSlotIndex='0', mUtcTime=TimestampedValue{mReferenceTimeMillis=66240, mValue=1614186761000}, mDebugInfo=[Sending new time suggestion nitzSignal=TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}}, reason=handleNitzReceived(TimestampedValue{mReferenceTimeMillis=66240, mValue=NitzData{mOriginalString=21/02/24,17:12:41+00,00, mZoneOffset=0, mDstOffset=0, mCurrentTimeMillis=1614186761000, mEmulatorHostTimeZone=null}})]}
      ]
  Network suggestion history:
    0@PT4M4.04S: NetworkTimeSuggestion{mUtcTime=TimestampedValue{mReferenceTimeMillis=244038, mValue=1614186939242}, mDebugInfo=[Origin: NetworkTimeUpdateService. event=3]}
  Gnss suggestion history:
    {Empty}
  External suggestion history:
    {Empty}