GNSS টাইম ডিটেকশন

Android 12 ও তার পরবর্তী যেকোনও ভার্সনে, Android ঐচ্ছিকভাবে time_detector পরিষেবাকে Unix এপক টাইম সাজেস্ট করার জন্য গ্লোবাল নেভিগেশন স্যাটেলাইট সিস্টেম (GNSS) ব্যবহার করতে পারে। AOSP-তে এটি ডিফল্ট হিসেবে চালু করা থাকে না।

GNSS টাইম শনাক্তকরণ চালু করা থাকলে, gnss_time_update_service প্যাসিভভাবে GNSS সোর্স থেকে লোকেশন আপডেট শোনে এবং GNSS সাজেশন time_detector পরিষেবায় জমা দেয়। তারপরে time_detector পরিষেবা নির্ধারণ করে যে সাজেশনের সাথে ম্যাচ করার জন্য সিস্টেম ক্লক আপডেট করা হবে কিনা।

বিদ্যুৎ ব্যবহারের উপর প্রভাব

AOSP gnss_time_update_service প্যাসিভভাবে লোকেশন আপডেট শোনে। এর অর্থ হল, পরিষেবাটি কখনওই সক্রিয়ভাবে GPS চালু করে না বা অতিরিক্ত পাওয়ার খরচ করে না। এর অর্থ হল, সিস্টেমের অন্য কোনও অ্যাপ বা পরিষেবা সক্রিয়ভাবে লোকেশন আপডেট করার অনুরোধ না করলে, gnss_time_update_service লোকেশন আপডেট পাবে না এবং GNSS সময় সাজেস্ট করবে না।

প্রয়োগ

GNSS টাইম ডিটেকশন চালু করতে, ডিভাইস প্রস্তুতকারকদের অবশ্যই সিস্টেম সার্ভারে gnss_time_update_service স্পষ্টভাবে চালু করতে হবে।

এই ফিচার চালু করতে, core/res/res/values/config.xml ফাইলের config_enableGnssTimeUpdateService ও config_autoTimeSourcesPriority, দুটি ভ্যালুই আপডেট করতে হবে। config_enableGnssTimeUpdateService-এর মান true হিসেবে সেট করুন এবং config_autoTimeSourcesPriority-এর আইটেম তালিকায় gnss যোগ করুন। অগ্রাধিকার তালিকায় gnss-এর অবস্থান নির্ধারণ করে যে অন্যান্য সোর্স থেকে পাওয়া সাজেশনের তুলনায় GNSS সাজেশনকে কতটা অগ্রাধিকার দেওয়া হবে।

নিচে core/res/res/values/config.xml ফাইলের একটি উদাহরণ দেওয়া হল যেখানে GNSS টাইম ডিটেকশন চালু করা আছে এবং network ও telephony-এর পরে অগ্রাধিকারের তালিকায় gnss তৃতীয় স্থানে আছে:

<!-- Specifies priority of automatic time sources. Suggestions from higher entries in the list
         take precedence over lower ones.
         See com.android.server.timedetector.TimeDetectorStrategy for available sources. -->
    <string-array name="config_autoTimeSourcesPriority">
        <item>network</item>
        <item>telephony</item>
        <item>gnss</item>
    </string-array>

    <!-- Enables the GnssTimeUpdate service. This is the global switch for enabling Gnss time based
         suggestions to TimeDetector service. See also config_autoTimeSourcesPriority. -->
    <bool name="config_enableGnssTimeUpdateService">true</bool>

ডিবাগ ও টেস্ট করা

GNSS টাইম ডিটেকশন পরীক্ষা করতে, adb shell cmd location কমান্ড ব্যবহার করুন। টেস্ট লোকেশন প্রদানকারী যোগ করতে এইসব কমান্ড ব্যবহার করুন যেখানে আপনি লোকেশন ও সংশ্লিষ্ট GNSS সময় উল্লেখ করতে পারবেন। gnss_time_update_service এই লোকেশন আপডেটগুলি শোনে এবং মাঝে মাঝে সাজেশন দেয়।

নিচে adb shell cmd location কমান্ডের উদাহরণ দেওয়া হল:

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

    adb shell cmd location set-location-enabled true --user 10
  • জিপিএস টেস্ট প্রোভাইডার যোগ করুন (সাধারণত প্রথমবার ব্যর্থ হয় এবং android from <SOME_UID> not allowed to perform MOCK_LOCATION-এর সাথে নিরাপত্তা সংক্রান্ত ব্যতিক্রম দেখায়)

    adb shell cmd location providers add-test-provider gps
  • আগের UID-এর জন্য মক লোকেশন সংক্রান্ত অনুমতি চালু করা

    adb shell appops set UID_PRINTED_IN_PREVIOUS_ERROR android:mock_location allow
  • জিপিএস টেস্ট প্রদানকারী যোগ করুন (কোনও সমস্যা ছাড়াই কাজ করা উচিত)

    adb shell cmd location providers set-test-provider-enabled gps true
  • জিপিএস টেস্ট পরিষেবা প্রদানকারী চালু করা

    adb shell cmd location providers set-test-provider-enabled gps true
  • সময় সহ লোকেশন সেট করুন (সময়টি নিম্নসীমা দ্বারা সেট করা সীমার চেয়ে কম হতে পারবে না)

    adb shell cmd location providers set-test-provider-location gps --location LATITUDE,LONGITUDE --time TIME