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

تتلقّى ميزة الرصد التلقائي للوقت اقتراحات بشأن الوقت من مصادر مختلفة، وتختَر الخيار الأفضل، ثمّ تضبط ساعة النظام في 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.

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

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

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

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

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

مصدر الوقت gnss هو مصدر جديد في Android 12 ويتم توفيره من خلال إشارات GPS. هذا هو مصدر موثوق للوقت عندما لا يكون telephony وnetwork متاحَين. تتم إضافة هذا الخيار إلى GnssTimeUpdateService الجديد في SystemServer الذي يستمع بشكل سلبي إلى تعديلات الموقع الجغرافي. عند تلقّي موقع جغرافي صالح، يقدّم GnssTimeUpdateService اقتراحًا إلى 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 بالتوقيت العالمي المنسق. ويمكن تمرير قيمته إلى Android TimeManager لاقتراح وقت نظام جديد. في النموذج المرجعي للتنفيذ أدناه، يمكنك الاطّلاع على نموذج لتنفيذ VHAL يعدّل هذا السمة.
  • واجهات برمجة تطبيقات النظام: تتوفّر في TimeManager طريقة جديدة تُسمى suggestExternalTime() لتوفير اقتراح وقت خارجي للنظام. إذا تم ضبط النظام على أخذ اقتراحات الوقت الخارجية في الاعتبار (باستخدام 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 استخدام الطابع الزمني المقدَّم كقيمة جديدة لساعة النظام.