رصد الوقت باستخدام نظام تحديد المواقع العالمي (GNSS)

في Android 12 والإصدارات الأحدث، يمكن لنظام Android اختياريًا استخدام نظام عالمي للملاحة عبر الأقمار الصناعية (GNSS) لاقتراح أوقات الحقبة الزمنية في Unix لخدمة time_detector. هذه الميزة غير مفعّلة تلقائيًا في مشروع Android مفتوح المصدر (AOSP).

عند تفعيل ميزة رصد الوقت باستخدام نظام GNSS، تستمع خدمة gnss_time_update_service بشكل غير نشط إلى تعديلات الموقع الجغرافي من مصادر GNSS وترسل اقتراحات GNSS إلى خدمة time_detector. بعد ذلك، تحدّد خدمة time_detector ما إذا كان سيتم تعديل ساعة النظام لتتطابق مع الاقتراح.

التأثير على استخدام الطاقة

تستمع خدمة gnss_time_update_service في AOSP بشكل غير نشط إلى تعديلات الموقع الجغرافي. ويعني ذلك أنّ الخدمة لا تُفعِّل نظام تحديد المواقع العالمي (GPS) بشكل نشط أو تستهلك طاقة إضافية. ويعني ذلك أيضًا أنّه ما لم يطلب تطبيق أو خدمة أخرى في النظام بشكل نشط تعديلات الموقع الجغرافي، لن تتلقّى خدمة gnss_time_update_service تعديلاً للموقع الجغرافي ولن تقترح وقتًا باستخدام نظام GNSS.

التنفيذ

لتفعيل ميزة رصد الوقت باستخدام نظام GNSS، يجب على الشركات المصنّعة للأجهزة تفعيل خدمة gnss_time_update_service بشكل صريح في خادم النظام.

يجب تعديل كلٍّ من قيمتَي config_enableGnssTimeUpdateService وconfig_autoTimeSourcesPriority في ملف core/res/res/values/config.xml لتفعيل هذه الميزة. اضبط قيمة config_enableGnssTimeUpdateService على true وأضِف gnss إلى قائمة العناصر الخاصة بـ config_autoTimeSourcesPriority. يحدّد موضع gnss في قائمة الأولويات الأولوية الممنوحة لاقتراحات GNSS مقارنةً بالاقتراحات الواردة من مصادر أخرى.

في ما يلي مثال على ملف core/res/res/values/config.xml الذي تم فيه تفعيل ميزة رصد الوقت باستخدام نظام GNSS، ويظهر gnss في الموضع الثالث في قائمة الأولويات بعد network وtelephony:

<!-- 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
  • إضافة موفّر اختبار GPS (عادةً ما يتعذّر إجراء ذلك في المرة الأولى ويتم عرض استثناء أمان مع android from <SOME_UID> not allowed to perform MOCK_LOCATION)

    adb shell cmd location providers add-test-provider gps
  • تفعيل أذونات الموقع الجغرافي الوهمي لرقم تعريف المستخدم السابق

    adb shell appops set UID_PRINTED_IN_PREVIOUS_ERROR android:mock_location allow
  • إضافة موفّر اختبار GPS (من المفترض أن يعمل بدون أخطاء)

    adb shell cmd location providers set-test-provider-enabled gps true
  • تفعيل موفّر اختبار GPS

    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