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

في الإصدار 12 من نظام التشغيل Android والإصدارات الأحدث، يمكن لنظام التشغيل Android استخدام نظام GNSS (النظام العالمي لتحديد المواقع عبر الأقمار الصناعية) بشكل اختياري لاقتراح أوقات Unix epoch على خدمة time_detector. لا تكون هذه الميزة مفعّلة تلقائيًا في "مشروع Android المفتوح المصدر" (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 بشكل صريح في خادم النظام.

يجب تعديل قيمتَي 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
  • تفعيل أذونات المواقع الوهمية لمعرّف UID السابق

    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