رصد الوقت تلقائيًا

تتلقّى ميزة الرصد التلقائي للوقت اقتراحات للوقت من مصادر مختلفة، وتختار أفضل خيار، ثم تضبط ساعة النظام في Android لتتطابق مع الوقت. كانت إصدارات Android السابقة توفّر طريقتَين لضبط التاريخ والوقت، إما يدويًا لكل مستخدم أو من خلال ميزة "الرصد التلقائي للوقت"، ويتم الضبط باستخدام أحد الخيارَين التاليَين:

  • يستخدم تطبيق telephony إشارات الاتصالات الخاصة بهوية الشبكة والمنطقة الزمنية (NITZ).
  • تستخدم network خوادم وقت بروتوكول وقت الشبكة (NTP).

يتطلّب كل خيار الاتصال بشبكات خارجية، وهو ما لا يتوفّر دائمًا في Android Automotive. على سبيل المثال، في بعض البلدان، قد لا تتضمّن بعض السيارات خدمة اتصال هاتفي مدمجة. لذلك، يتم توفير وقت أنظمة الملاحة العالمية عبر الأقمار الصناعية (GNSS) كمصدر لوقت النظام يمكنك استخدامه عندما لا يتوفّر اتصال بالشبكة.

يوفّر إصدار Android القادم خيارَين إضافيَين لرصد الوقت وضبطه تلقائيًا:

  • تستخدم gnss أنظمة الملاحة العالمية عبر الأقمار الصناعية (GNSS).
  • تستخدم external إحدى خصائص VHAL أو System API.

تفعيل ميزة "الرصد التلقائي للوقت"

لتفعيل ميزة رصد الوقت تلقائيًا، احرص على اختيار الإعدادات > التاريخ والوقت > التاريخ والوقت التلقائي:

الشكل 1. اختَر "التاريخ والوقت التلقائي"

ضبط مصادر الوقت

لتحديد مصادر الوقت التي سيتم تضمينها في عملية الرصد التلقائي للوقت، والأولوية التي يجب أن يتم بها أخذ مصادر الوقت هذه في الاعتبار، عليك تعديل ملف إعدادات الموارد الخاص بالجهاز، core/res/res/values/config.xml:

<!-- 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>telephony</item>
    <item>network</item>
</string-array>

في هذا المثال، يتم أخذ telephony وnetwork في الاعتبار عند رصد الوقت تلقائيًا، ويتم منح الأولوية لاقتراحات الوقت telephony على اقتراحات الوقت network.

بشكل عام، يتم تجاهل الاقتراحات الواردة من مصدر ذي أولوية أعلى إذا كان الاقتراح غير صالح أو قديمًا جدًا. بالإضافة إلى ذلك، إذا تطابقت أعلى اقتراح صالح من حيث الأولوية مع وقت ساعة النظام الحالي على الجهاز في غضون بضع ثوانٍ (القيمة التلقائية هي ثانيتان (2) )، لن يتم تغيير الوقت.

الحد الأدنى للوقت

يوفّر نظام التشغيل Android 12 حدًا زمنيًا أدنى جديدًا لاستخدامه عند التحقّق من صحة اقتراحات الوقت. قبل توفّر هذه الميزة، لم يكن بإمكان ميزة &quot;الرصد التلقائي للوقت&quot; التحقّق من صحة الوقت الوارد المقترَح بتوقيت UTC. باستخدام هذه الميزة، يتم تجاهل الأوقات التي تنقضي قبل الحد الأدنى.

يتم تحديد قيمة الحد الأدنى من تاريخ مشتق من الطابع الزمني للإنشاء. يعمل ذلك على أساس أنّه لا يمكن أن يحدث وقت صالح قبل إنشاء صورة النظام. لا يفرض نظام التشغيل Android حدًا أقصى.

اقتراحات الوقت المستنِدة إلى نظام GNSS

gnss مصدر الوقت هو ميزة جديدة في نظام التشغيل Android 12، ويتم توفيرها من خلال إشارات نظام تحديد المواقع العالمي (GPS). وهو مصدر موثوق للوقت عندما لا يتوفّر telephony وnetwork. تمت إضافة هذا الخيار إلى GnssTimeUpdateService الجديد في SystemServer الذي يستمع بشكل غير نشط إلى تحديثات الموقع الجغرافي. عند تلقّي موقع جغرافي صالح، يقترح GnssTimeUpdateService على TimeDetectorService تعديل ساعة النظام، ثم يحدّد TimeDetectorService ما إذا كان يجب تعديلها.

بشكلٍ تلقائي، gnss لا يكون مصدر الوقت مفعَّلاً في AOSP، وبالتالي، يجب أن يفعّله الشركاء:

<!-- 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>telephony</item>
    <item>network</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>

لتفعيل هذه الميزة، اتّبِع الخطوات التالية:

  1. يتوفّر تحديث لجهاز config_enableGnssTimeUpdateService يجب ضبط قيمة config_enableGnssTimeUpdateService على true.
  2. يتوفّر تحديث لجهاز config_autoTimeSourcesPriority يجب إضافة gnss إلى قائمة العناصر الخاصة بـ config_autoTimeSourcesPriority. يحدّد موضع gnss في قائمة الأولوية الأولوية الممنوحة لاقتراحات نظام GNSS، وذلك بالنسبة إلى القيم من مصادر أخرى.

التأثير على الطاقة

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

الاختبار

مجموعة أدوات اختبار التوافق (CTS)

يتم توفير اختبار CTS للتحقّق من توفّر الوقت الذي يوفّره نظام GNSS. للحصول على التفاصيل، يُرجى الاطّلاع على LocationShellCommand.java.

اختبارات الوحدات

يمكنك الاطّلاع على اختبارات الوحدة الأساسية في الملف التالي:

atest frameworks/base/services/tests/servicestests/src/com/android/server/timedetector/GnssTimeUpdateServiceTest.java

الاختبارات اليدوية

لاختبار هذه الميزة، تمت إضافة أوامر جديدة إلى LocationShellCommand.java. استخدِم هذه الأوامر لإضافة موفّري اختبار يمكنك من خلالهم تحديد موقع جغرافي ووقت GNSS المرتبط به. يستمع تطبيق GnssTimeUpdateService إلى هذه التعديلات على الموقع الجغرافي، ويقدّم اقتراحات بشكل دوري.

ملاحظة: قد تتغير واجهة هذه الأوامر بين الإصدارات.

# Enable Master Location Switch in the foreground user (usually user 10 on automotive).
# If you just flashed, this can be done through Setup Wizard.
adb shell cmd location set-location-enabled true --user 10

# Add GPS test provider (this usually fails the first time and will throw a SecurityException
# with "android from <some-uid> not allowed to perform MOCK_LOCATION".)
adb shell cmd location providers add-test-provider gps

# Enable mock location permissions for previous UID
adb shell appops set <uid printed in previous error> android:mock_location allow

# Add GPS test provider (Should work with no errors.)
adb shell cmd location providers add-test-provider gps

# Enable GPS test provider
adb shell cmd location providers set-test-provider-enabled gps true

# Set location with time (time can't be earlier than the limit set by the lower bound.)
adb shell cmd location providers set-test-provider-location gps --location <LATITUDE>,<LONGITUDE> --time <TIME>

اقتراحات الأوقات الخارجية

تُعدّ اقتراحات الوقت الخارجية طريقة أخرى لتقديم اقتراحات الوقت التلقائية على أجهزة Android. تتيح لك هذه الخيارات الجديدة تقديم اقتراحات مخصّصة بالكامل بشأن الوقت إلى Android، والتي يمكن أن تأتي من وحدات تحكّم إلكترونية مختلفة يمكنها بدورها استخدام مجموعة من ساعة الوقت الفعلي أو نظام GNSS أو NITZ أو أي مصدر آخر للوقت.

تتوفّر الاقتراحات التالية في نظام التشغيل Android 12 ويمكن اعتبارها external اقتراحات بشأن الوقت:

  • سمات VHAL: تم توفير سمة VHAL جديدة باسم EPOCH_TIME. تشير هذه السمة إلى عدد المللي ثانية التي انقضت منذ 1/1/1970 بالتوقيت العالمي المنسق. يمكن تمرير قيمتها إلى TimeManager Android لاقتراح وقت جديد للنظام. يتوفّر نموذج لتنفيذ VHAL يعدّل هذه السمة في صفحة التنفيذ المرجعي.
  • واجهات برمجة تطبيقات النظام تتوفّر طريقة جديدة باسم suggestExternalTime() في TimeManager لتزويد النظام باقتراح وقت خارجي. إذا تم ضبط النظام على أخذ اقتراحات الوقت الخارجية في الاعتبار (باستخدام config_autoTimeSourcesPriorityفي ملف الإعداد)، يتم استخدام الطابع الزمني الذي تم تمريره إلى هذه الطريقة لضبط وقت النظام، في حال عدم توفّر اقتراحات وقت ذات أولوية أعلى.

يمكنك تنفيذ حلّ خارجي للوقت كما هو موضّح أدناه:

  1. عدِّل ملف إعداد المورد (core/res/res/values/config.xml) ثم أضِف القيمة external إلى config_autoTimeSourcesPriority:
    <string-array name="config_autoTimeSourcesPriority>
            <item>external</item>
            <item>gnss</item>
    </string-array>

    يؤدي ذلك إلى توجيه نظام التشغيل Android لمنح اقتراحات الوقت الخارجية الأولوية القصوى عند ضبط ساعة النظام. يكتب الجهاز في المركبة اقتراحًا للطابع الزمني في EPOCH_TIME سمة VHAL الجديدة.

  2. يقرأ تطبيق مقدَّم من مورّد هذه السمة ويطلب TimeManager.suggestExternal(). يمكن أن يستخدم Android بعد ذلك الطابع الزمني المقدَّم كقيمة جديدة لساعة النظام.