অ্যান্ড্রয়েড ১২ এবং এর পরবর্তী সংস্করণগুলিতে, অ্যান্ড্রয়েড ঐচ্ছিকভাবে time_detector পরিষেবাটিকে ইউনিক্স ইপক টাইম সাজেস্ট করার জন্য গ্লোবাল নেভিগেশন স্যাটেলাইট সিস্টেম (GNSS) ব্যবহার করতে পারে। AOSP-তে এটি ডিফল্টরূপে সক্রিয় থাকে না।
যখন GNSS সময় সনাক্তকরণ সক্রিয় করা হয়, তখন gnss_time_update_service নিষ্ক্রিয়ভাবে GNSS উৎস থেকে অবস্থানের আপডেট শোনে এবং time_detector সার্ভিসের কাছে GNSS পরামর্শ জমা দেয়। এরপর 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 10GPS টেস্ট প্রোভাইডার যোগ করুন (সাধারণত প্রথমবার ব্যর্থ হয় এবং একটি সিকিউরিটি এক্সেপশন দেখায়, যেখানে বলা হয়
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