نظرة عامة على الوقت

تصف هذه الصفحة كيفية عمل اكتشاف الوقت والمنطقة الزمنية على Android. يتضمن ذلك كيف يكتشف Android تلقائيًا المناطق الزمنية والزمنية وخيارات التكوين لمصنعي الأجهزة ومعلومات الاختبار.

نظرة عامة على المناطق الزمنية والزمنية

لتحديد التوقيت المحلي للمستخدم للعرض في مواقع مثل شريط الحالة ، يتتبع Android حالتين مرتبطتين ولكنهما مستقلتان:

  • وقت عصر يونكس الحالي
  • المنطقة الزمنية الحالية

يعتبر وقت حقبة Unix الحالية والمنطقة الزمنية الحالية حالتين على مستوى الجهاز ، مما يعني أنهما مشتركان من قبل جميع مستخدمي الجهاز.

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

تحدد المنطقة الزمنية الحالية التعديل الذي يجب إجراؤه لتحويل وقت عصر يونكس الحالي إلى توقيت محلي. على سبيل المثال ، خلال فصل الصيف في لوس أنجلوس ، يقوم الجهاز بطرح 7 ساعات من وقت عصر يونكس الحالي ، وفي الشتاء يتم طرح 8 ساعات.

لدعم حسابات التوقيت المحلي هذه ، تحتوي جميع أجهزة Android على قاعدة بيانات لجميع قواعد المنطقة الزمنية العالمية . لمزيد من المعلومات حول قواعد المنطقة الزمنية ، راجع قواعد المنطقة الزمنية .

عندما ينتقل المستخدم إلى موقع جديد يستخدم منطقة زمنية مختلفة ، لا يلزم تعديل وقت عصر يونكس الحالي ولكن المستخدم يريد عادةً رؤية التوقيت المحلي بدلاً من الوقت في موقعه السابق. يضمن تغيير المنطقة الزمنية الحالية تطبيق الإزاحة الصحيحة على وقت حقبة Unix الحالية لعرض التوقيت المحلي الصحيح للموقع الجديد.

يسمح AOSP للمستخدمين بالتحكم بشكل مستقل في ما إذا كان الوقت والمنطقة الزمنية قد تم ضبطهما تلقائيًا لهم من خلال الآليات التالية.

  • الكشف التلقائي عن الوقت: يضمن أن الجهاز يحتوي على وقت حقبة Unix الحالي الصحيح.
  • الكشف التلقائي عن المنطقة الزمنية: يضمن احتواء الجهاز على المنطقة الزمنية الحالية الصحيحة.

الكشف التلقائي عن الوقت

يقدم هذا القسم نظرة عامة على خدمة time_detector التي تدير الكشف التلقائي عن الوقت ، وعناصر تحكم المستخدم ، وخيارات التكوين ، وتفاصيل الاختبار.

خدمة كشف الوقت

تعمل خدمة time_detector ، الموجودة على الأجهزة التي تعمل بنظام Android 10 أو أعلى ، على إدارة الاكتشاف التلقائي للوقت. يقوم بضبط وقت عصر Unix الحالي للجهاز حسب الحاجة عند تمكين الكشف التلقائي عن الوقت.

تكون خدمة time_detector دائمًا في إحدى الحالتين: غير مؤكد أو مؤكد . يتم تحديد حالة الخدمة المؤكدة أو غير المؤكدة من خلال اقتراحات الوقت التي تتلقاها من مصادر مختلفة.

عندما تكون خدمة time_detector مؤكدة ، بمعنى أنها تلقت اقتراحًا بمعلومات وقت عصر Unix ، فإنها تلغي وقت عصر Unix الحالي إذا كان اقتراح الوقت مختلفًا عن وقت عصر Unix الحالي.

عندما يكون time_detector غير مؤكد ، فإنه لا يتجاوز الوقت الحالي. تعني الحالة غير المؤكدة عادةً أن خدمة time_detector لم تتلق اقتراحات الوقت. تصبح خدمة time_detector أيضًا غير مؤكدة إذا كانت الاقتراحات التي تلقتها تعتبر قديمة جدًا بحيث لا يمكن استخدامها. يتم أخذ عمر الاقتراحات في الاعتبار لأن التعديلات التي تستخدم اقتراحات وقت عصر يونكس القديمة تعتمد على ساعة الوقت الفعلي المنقضية على الجهاز ، والتي يُفترض أنها غير دقيقة على مدى فترات طويلة.

لإنشاء وقت حقبة Unix الحالية تلقائيًا ، يوجد للجهاز مصادر مختلفة يمكنه استخدامها. هذه تسمى الأصول في هذا المستند. تعامل خدمة time_detector مع تسلسل الاقتراحات على أنها مميزة بناءً على مصدرها.

خدمة time_detector ذات الحالة ، مما يعني أنها تحتفظ بسجل لأحدث اقتراح قدمه كل مصدر. يتم تقديم اقتراحات جديدة لـ time_detector إذا كان الأصل يحتوي على معلومات أكثر حداثة عن وقت Unix. تعمل خدمة time_detector على إعادة تقييم الاقتراحات الجديدة والحالية وتحديث حالة الجهاز عند تلقي الاقتراحات.

على الرغم من الاتفاق على التوقيت العالمي المنسق دوليًا ، إلا أن هناك العديد من الأسباب التي تجعل إنشاء وقت عصر يونكس الحالي ليس دائمًا أمرًا سهلاً بالنسبة لجهاز Android:

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

يوجد أصلان رئيسيان لاكتشاف الوقت تم تكوينهما للاستخدام افتراضيًا في AOSP:

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

تتطلب أصول كل من الاتصالات الهاتفية والشبكات الاتصال بالشبكات الخارجية ، والتي لا تتوفر دائمًا.

بدءًا من Android 12 ، يدعم Android أيضًا الأصول التالية ، والتي لم يتم تكوينها للاستخدام افتراضيًا:

  • GNSS : يستخدم موفر موقع GPS للحصول على وقت من مصدر GNSS.
  • خارجي : أصل عام يسمح لمصنعي الأجهزة بدمج مصدرهم الخاص بزمن عصر Unix.

اعدادات الوقت

يمكن للمستخدمين تمكين الكشف التلقائي عن الوقت في النظام> التاريخ والوقت في تطبيق إعدادات AOSP.

الكشف التلقائي عن الوقت في الإعدادات

الشكل 1. الكشف التلقائي عن الوقت في الإعدادات.

يصف الجدول التالي عناصر تحكم المستخدم لاكتشاف الوقت في تطبيق إعدادات AOSP.

* في Android 11 والإصدارات الأقدم ، يُسمى هذا الإعداد استخدام الوقت الذي توفره الشبكة

موقع إعدادات AOSP اسم إعدادات AOSP نِطَاق سلوك
النظام> التاريخ والوقت ضبط الوقت تلقائيا * جميع المستخدمين

تبديل.

عند التشغيل ، يكون الجهاز مسؤولاً عن اكتشاف وقت عصر Unix الحالي. عند إيقاف التشغيل ، يتم تزويد المستخدمين بعناصر تحكم لضبط وقت الجهاز يدويًا.

عندما يقوم المستخدم بإدخال الوقت يدويًا ، فإنه يدخل التوقيت المحلي ، وليس وقت عصر Unix. يتم حساب وقت عصر يونكس الحالي باستخدام المنطقة الزمنية الحالية لاشتقاق وقت عصر يونكس.

إعدادات

يمكن لمصنعي الأجهزة تكوين خدمة time_detector بطرق مختلفة ، مثل الأصول التي يجب استخدامها وكيفية ترتيب أولويات الإشارات الواردة منها.

أصل الأولوية

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

بالنسبة للأجهزة التي تعمل بنظام التشغيل Android 11 أو إصدار أقدم ، يتم ترميز أولوية الأصل بشكل ثابت إلى ["telephony", "network"] ، مما يعني أنه يتم إعطاء الأولوية لاقتراحات الاتصال الهاتفي فوق اقتراحات الشبكة.

تكوين 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>network</item>
    <item>telephony</item>
</string-array>

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

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

قيم الأصل المسموح بها هي:

وقت أقل

يقدم Android 12 حدًا زمنيًا أقل يُستخدم للتحقق من صحة اقتراحات الوقت التي تتلقاها خدمة time_detector . يتم تعيين قيمة الحد الأدنى للوقت من الطابع الزمني للإنشاء. يعمل هذا على مبدأ أن الوقت الصالح لا يمكن أن يكون قبل إنشاء صورة نظام الجهاز. إذا كان اقتراح الوقت قبل الحد الأدنى للوقت ، فإن خدمة time_detector تتجاهل الاقتراح لأنه لا يمكن أن يكون صالحًا إذا كان الطابع الزمني للبناء صحيحًا.

بالنسبة للأجهزة التي تعمل بنظام Android 11 أو إصدار أقدم ، فإن خدمة time_detector لا تتحقق من صحة اقتراحات وقت عصر Unix الواردة.

لا يفرض Android حدًا زمنيًا أعلى.

تصحيح الوقت والاختبار

يوفر هذا القسم معلومات حول كيفية تصحيح أخطاء واختبار سلوك خدمة time_detector والمكونات الأخرى المشتركة بين جميع الأصول.

التعامل مع خدمة Time_detector

لعرض تكوين خدمة time_detector وحالة خدمة time_detector ، استخدم:

adb shell cmd time_detector dump

للاطلاع على أوامر إضافية لتصحيح الأخطاء واختبار اكتشاف المنطقة الزمنية ، استخدم:

adb shell cmd time_detector help

يصف ناتج المساعدة أيضًا خصائص خدمة device_config التي يمكن استخدامها للتأثير على سلوك time_detector للاختبار أو في الإنتاج. للحصول على تفاصيل ، راجع تكوين جهاز باستخدام خدمة device_config .

للتحقق من صحة الكشف التلقائي عن الوقت ، يجب أن يكون المختبرين على دراية بأصول خدمة time_detector التي تستخدمها. فيما يلي مثال على الإخراج من أمر adb shell cmd time_zone_detector dump ، مع المعلومات حول الأصل الحالي وحالة الخدمة بالخط العريض:

$ adb shell cmd time_detector dump

TimeDetectorStrategy:
  mLastAutoSystemClockTimeSet=null
  mEnvironment.isAutoTimeDetectionEnabled()=true
  mEnvironment.elapsedRealtimeMillis()=23717241
  mEnvironment.systemClockMillis()=1626707861336
  mEnvironment.systemClockUpdateThresholdMillis()=2000
  mEnvironment.autoTimeLowerBound()=2021-07-19T07:48:05Z(1626680885000)
  mEnvironment.autoOriginPriorities()=[network,telephony]
  Time change log:
    ...
  Telephony suggestion history:
    ...
  Network suggestion history:
    ...
  Gnss suggestion history:
    ...
  External suggestion history:
    ...

يمكن تفسير المعلومات على النحو التالي:

مفتاح قيمة
mEnvironment.isAutoTimeDetectionEnabled() ما إذا كان الكشف التلقائي عن الوقت ممكّنًا أم لا.
mEnvironment.autoTimeLowerBound() يستخدم الحد الأدنى الحالي للتحقق من صحة اقتراحات الوقت.
mEnvironment.autoOriginPriorities() أصول الاستخدام وترتيب الأولوية.

يشير سجل تغيير الوقت إلى المناسبات التي قامت فيها خدمة time_detector بتغيير وقت عصر Unix الحالي للجهاز.

تشير معلومات سجل الاقتراحات إلى الاقتراحات التي قدمها كل مصدر.

الكشف التلقائي عن المنطقة الزمنية

يوفر هذا القسم نظرة عامة على خدمة time_zone_detector التي تدير الكشف التلقائي عن المنطقة الزمنية ، وعناصر تحكم المستخدم في الإعدادات ، والهاتف واكتشاف المنطقة الزمنية للموقع ، وتفاصيل الاختبار.

خدمة time_zone_detector

تعمل خدمة time_zone_detector ، الموجودة على الأجهزة التي تعمل بنظام Android 11 أو أعلى ، على إدارة الكشف التلقائي عن المنطقة الزمنية. يقوم بضبط المنطقة الزمنية الحالية للجهاز حسب الحاجة عند تمكين الكشف التلقائي عن المنطقة الزمنية.

عند تمكين الاكتشاف التلقائي للمنطقة الزمنية ، يمكن أن يكون time_zone_detector في إحدى حالتين: غير مؤكد ومؤكد .

عندما تكون خدمة time_zone_detector في حالة معينة ، فهذا يعني أن خدمة time_zone_detector قد تلقت معلومات قوية عن المنطقة الزمنية ، مما قد يتسبب في تجاوزها للمنطقة الزمنية الحالية. عندما يكون غير مؤكد ، فهذا يعني أنه لم يتلق أي معلومات أو لم يتلق سوى معلومات منخفضة الثقة ، مما يعني أنه لن يتجاوز المنطقة الزمنية الحالية.

يمكن أن تشتمل حالات خدمة time_zone_detector المحددة على حالات لا يتوفر فيها time_zone_detector الزمنية معلومات منطقة زمنية لاستخدامها ، أو حيث توجد مناطق زمنية متعددة للاختيار من بينها. هذه الحالات هي كما يلي:

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

يتم تحديد حالة خدمة time_zone_detector المؤكدة أو غير المؤكدة من خلال اقتراحات المنطقة الزمنية التي يتم إرسالها بواسطة الأصل .

بشكل عام ، تأتي الاقتراحات في نوعين يتطابقان إلى حد كبير مع الحالات المحتملة time_zone_detector : مؤكدة وغير مؤكدة . فيما يلي أمثلة على أنواع الاقتراحات:

  • اكتب = "غير مؤكد" ، zoneIds = []

    • الأصل لا يعرف ما هي المنطقة الزمنية.
  • type = "ertain "، zoneIds = [" Europe / London "]

    • الأصل مؤكد أن المنطقة هي "أوروبا / لندن".
  • اكتب = "مؤكد" ، zoneIds = []

    • الأصل مؤكد ، لكن لا يوجد معرف منطقة مرتبط بالموقع الحالي.
  • type = "ertain "، zoneIds = [" America / Denver "،" America / Phoenix "]

    • الأصل مؤكد أن الإجابة هي واحدة من منطقتين ، لكن لا يمكن الاختيار بين "أمريكا / دنفر" و "أمريكا / فينيكس".

تعامل خدمة time_zone_detector تسلسل الاقتراحات على أنها مميزة بناءً على مصدرها. اعتمادًا على الأصل ، قد تحتوي الاقتراحات أيضًا على بيانات وصفية تشير إلى مدى تأكد الأصل.

تتميز خدمة time_zone_detector بالحالة ، مما يعني أنها تحتفظ بسجل لأحدث اقتراح قدمه كل مصدر. يتم إرسال الاقتراحات الجديدة إلى خدمة time_zone_detector إذا لم يعد الاقتراح السابق صحيحًا ؛ أي إذا كان الأصل لديه الآن اقتراح مختلف ، أو إذا فقد القدرة على اكتشاف المنطقة الزمنية. تعمل خدمة time_zone_detector على إعادة تقييم الاقتراحات الجديدة والحالية وتحديث حالة الجهاز عند تلقي الاقتراحات.

يدعم Android أصلين لاكتشاف المنطقة الزمنية:

  • مهاتفة
  • موقع

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

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

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

للحصول على تفاصيل التكوين للوضع الاحتياطي الهاتفي ، راجع تكوين اكتشاف المنطقة الزمنية .

إعدادات المنطقة الزمنية

يمكن للمستخدمين تمكين الإعدادات وتكوينها للكشف التلقائي عن المنطقة الزمنية في تطبيق إعدادات AOSP.

الكشف التلقائي عن المنطقة الزمنية في الإعدادات

الشكل 2. الكشف التلقائي عن المنطقة الزمنية في الإعدادات.

يصف الجدول التالي عناصر تحكم المستخدم لاكتشاف المنطقة الزمنية في تطبيق إعدادات AOSP.

* في Android 11 والإصدارات الأقدم ، يُطلق على هذا الإعداد استخدام المنطقة الزمنية التي توفرها الشبكة

موقع إعدادات AOSP اسم إعدادات AOSP نِطَاق سلوك
النظام> التاريخ والوقت ضبط المنطقة الزمنية تلقائيًا * جميع المستخدمين

تبديل.

عند التشغيل ، يكون الجهاز مسؤولاً عن اكتشاف المنطقة الزمنية الحالية. عند إيقاف التشغيل ، يتم تزويد المستخدمين بعناصر تحكم لتعيين المنطقة الزمنية للجهاز يدويًا.

النظام> التاريخ والوقت استخدم الموقع لتعيين المنطقة الزمنية المستخدم الحالي

تبديل.

متاح من Android 12. يتم عرض هذا التبديل فقط عندما يكون اكتشاف المنطقة الزمنية للموقع مدعومًا على الجهاز.

موقع استخدم الموقع المستخدم الحالي

تبديل.

يسمح أو يمنع استخدام موقع الجهاز بشكل عام. تكون القيمة ذات صلة إذا كان اكتشاف المنطقة الزمنية للموقع مدعومًا على الجهاز.

يوفر ما يلي نظرة عامة على سلوك الجهاز لاكتشاف المنطقة الزمنية وفقًا للإعدادات التي اختارها المستخدم:

  • [التاريخ والوقت] تعيين المنطقة الزمنية تلقائيًا: إيقاف

    • يجب على المستخدم تحديد المنطقة الزمنية يدويًا.
  • [التاريخ والوقت] تعيين المنطقة الزمنية تلقائيًا: تشغيل

    • [الموقع] استخدام الموقع: إيقاف

      • تُستخدم الإشارات الهاتفية لاكتشاف المنطقة الزمنية. (انظر الملاحظة أدناه.)
    • [الموقع] استخدام الموقع: ON

      • [التاريخ والوقت] استخدم الموقع لضبط المنطقة الزمنية: تشغيل

        • يستخدم الموقع لاكتشاف المنطقة الزمنية.
      • [التاريخ والوقت] استخدم الموقع لضبط المنطقة الزمنية: إيقاف

        • تُستخدم الإشارات الهاتفية لاكتشاف المنطقة الزمنية. (انظر الملاحظة أدناه.)

أجهزة مستخدم متعددة

نظرًا لأن العديد من الإعدادات المعنية يتم تحديد نطاقها للمستخدم الحالي ، يمكن أن يتغير سلوك اكتشاف المنطقة الزمنية للجهاز عندما يتغير المستخدم الحالي على جهاز Android متعدد المستخدمين.

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

السلوك عند التغيير من وإلى الاكتشاف التلقائي

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

وبالمثل ، عندما يقوم المستخدم بإجراء تغيير في الإعدادات ينتج عنه تغيير في الأصل الحالي لخدمة time_zone_detector ، فقد يكون time_zone_detector قد تلقى بالفعل اقتراحات للأصل الجديد وبالتالي قد يتم تغيير وقت الجهاز لمطابقة رأي خدمة time_zone_detector على الفور.

الكشف عن المنطقة الزمنية الهاتفية

يستخدم اكتشاف المنطقة الزمنية الهاتفية إشارات المهاتفة لتحديد المنطقة الزمنية الحالية. لمزيد من المعلومات ، راجع اكتشاف المنطقة الزمنية الهاتفية .

الكشف عن المنطقة الزمنية للموقع

يتوفر اكتشاف المنطقة الزمنية للموقع على نظام Android 12 أو إصدار أحدث. إنها ميزة اختيارية لاكتشاف المنطقة الزمنية تلقائيًا تتيح للأجهزة استخدام موقعها لتحديد المنطقة الزمنية الحالية.

تعمل خدمة location_time_zone_manager ، التي تم تقديمها في Android 12 ، في خادم النظام وتحتوي على الكود المسؤول عن إرسال اقتراحات أصل الموقع إلى خدمة time_zone_detector . لمزيد من المعلومات ، راجع اكتشاف المنطقة الزمنية للموقع .

اعتبارات اعتماد الميزة

يصف هذا القسم جوانب ميزة اكتشاف المنطقة الزمنية للموقع لمساعدة الشركة المصنّعة للجهاز على تحديد ما إذا كان سيتم اعتماد الميزة على الجهاز أم لا.

مقارنة الاتصال الهاتفي واكتشاف الموقع

يقدم الجدول التالي مقارنة بين مزايا وعيوب استخدام الموقع بدلاً من الإشارات الهاتفية لاكتشاف المنطقة الزمنية.

الكشف الهاتفي كشف الموقع
صواب يختلف حسب الدولة.

يعتمد على صحة وتوافر مركز عملائي و NITZ.
يعتمد على تكوين الميزة أو مكونات المكون الإضافي.

يختلف الصواب عادةً حسب:
  • دقة مزود الموقع وانتظامه.
  • جودة بيانات خريطة المنطقة الزمنية.
قابلية التحديث يعتمد الكشف الهاتفي على الملفات الموجودة في وحدة بيانات المنطقة الزمنية القابلة للتحديث (com.android.tzdata APEX). يعتمد على تكوين الميزة أو مكونات المكون الإضافي.

تعتمد قابلية التحديث عادةً على ما إذا كان الجهاز يستخدم بيانات خريطة المنطقة الزمنية للعميل أو الخادم.

ملاحظة: لا يتم تضمين بيانات خريطة المنطقة الزمنية في وحدة بيانات المنطقة الزمنية المستخدمة لتحديث نسخة Android من TZDB ومعلومات المنطقة الزمنية الأخرى.

يجب على الشركات المصنعة للأجهزة أيضًا مراعاة تناسق الإصدار بين قواعد المنطقة الزمنية وبيانات خريطة المنطقة الزمنية.
استهلاك الطاقة لا شيء أو استخدام منخفض للطاقة يعتمد على إعدادات موقع المستخدم ، والمكونات الإضافية المستخدمة ، وعادة ما تطلب التطبيقات الأخرى الموقع.
التوفر الأجهزة الهاتفية فقط. عادة ما يتطلب بطاقة SIM عاملة. يعتمد اكتشاف الموقع على موفري الموقع المتاحين.
خصوصية المستخدم

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

وبشكل أكثر تحديدًا ، يمكن أن يعمل اكتشاف المنطقة الزمنية من خلال وسائل سلبية أو نشطة:

  • خامل: هناك شيء ما في بيئة الجهاز يخبر الجهاز بالمنطقة الزمنية التي يجب استخدامها في تلك البيئة.
  • نشط: يجب أن يعمل الجهاز على تحديد المنطقة الزمنية لنفسه واعتمادًا على إعدادات خصوصية المستخدمين وموافقتهم ، يحصل على موقع الجهاز للقيام بذلك. يمكنه بعد ذلك مشاركة موقعه مع الخدمات الخارجية. انظر المناقشة أدناه للحصول على تفاصيل حول خصوصية المستخدم والموافقة.

الاكتشاف السلبي ، كما هو الحال مع أصل الهاتف ، ليس له أي آثار إضافية على الخصوصية للمستخدمين.

يتضمن الاكتشاف النشط ، كما هو الحال مع أصل الموقع ، تحديد موقع الجهاز ، والذي قد لا يرغب المستخدمون في الموافقة عليه ، ويمكن إرسال الموقع عبر شبكة لتحديد معرف المنطقة الزمنية.

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

لمزيد من التفاصيل حول ميزات خصوصية المستخدم ، راجع اكتشاف المنطقة الزمنية للموقع .

إعدادات

يمكن لمصنعي الأجهزة تكوين خدمة time_zone_detector لتغيير سلوكها. يصف هذا القسم خيارات التكوين للسلوك العام لخدمة time_zone_detector . للحصول على تفاصيل التكوين الخاصة بأصول اكتشاف المهاتفة والمنطقة الزمنية ، راجع اكتشاف المنطقة الزمنية الهاتفية واكتشاف المنطقة الزمنية للموقع .

تكوين AOSP الأساسي موجود في frameworks/base/core/res/res/values/config.xml .

مفتاح التكوين قيمة AOSP وصف
config_supportTelephonyTimeZoneFallback true عندما يكون true ، سيستخدم "time_zone_detector" الوضع الاحتياطي للاتصالات الهاتفية. هذا موجود في Android 13 وما بعده.

تغيير السلوك الافتراضي للجهاز

في AOSP ، يتم تمكين الكشف التلقائي عن المنطقة الزمنية افتراضيًا مع ضبط إعداد auto_time_zone على true . لتعطيل الاكتشاف التلقائي للوقت افتراضيًا ، قم بتعيين قيمة def_auto_time_zone المحددة في frameworks/base/packages/SettingsProvider/res/values/defaults.xml على false .

عند استعادة نسخة احتياطية من جهاز آخر ، يقوم إطار العمل بتحديث قيمة إعداد auto_time_zone افتراضيًا. إذا كنت ترغب في التأكد من عدم استعادة هذا الإعداد من نسخة احتياطية ، فقم بتضمين auto_time_zone في مجموعة restore_blocked_global_settings المحددة في frameworks/base/packages/SettingsProvider/res/values/blocked_settings.xml .

تصحيح المنطقة الزمنية واختبارها

يوفر هذا القسم معلومات حول كيفية تصحيح أخطاء واختبار سلوك خدمة time_zone_detector والمكونات الأخرى المشتركة بين جميع الأصول.

تكوين جهاز باستخدام خدمة device_config

خدمة device_config هي آلية مستخدمة على نظام Android لتكوين سلوك قابل للتعديل باستخدام القيم التي يتم سحبها عادةً من خادم بعيد عن طريق رمز الملكية (غير AOSP). عند استخدام قيم device_config للاختبار ، خاصةً أثناء الاختبارات اليدوية طويلة المدى ، قد يقوم الجهاز بمزامنة العلامات ، مما قد يؤدي إلى إعادة تعيين العلامات ومسح القيم المحددة للاختبار.

في Android 12 أو أعلى ، لمنع مزامنة العلامات مؤقتًا ، استخدم:

adb shell cmd device_config set_sync_disabled_for_tests persistent

لاستعادة مزامنة العلم بعد الاختبارات ، استخدم:

adb shell cmd device_config set_sync_disabled_for_tests none

بعد استعادة مزامنة العلم ، أعد تشغيل الجهاز.

لمزيد من المعلومات ، استخدم $ adb shell cmd device_config help .

التعامل مع خدمة time_zone_detector

لعرض تكوين time_zone_detector وحالة خدمة time_zone_detector ، استخدم:

adb shell cmd time_zone_detector dump

للاطلاع على أوامر إضافية لتصحيح الأخطاء واختبار اكتشاف المنطقة الزمنية ، استخدم:

adb shell cmd time_zone_detector help

يصف ناتج التعليمات أيضًا خصائص خدمة device_config التي يمكن استخدامها للتأثير على سلوك خدمة time_zone_detector للاختبار أو في الإنتاج. للحصول على تفاصيل ، راجع تكوين جهاز باستخدام خدمة device_config .

للتحقق من اكتشاف المنطقة الزمنية ، يجب أن يكون المختبرين على دراية بالمصدر الذي يستخدمه time_zone_detector . لفهم الأصل الحالي لـ time_zone_detector والتأثير فيه ، استخدم أحد الخيارات التالية:

  • تحقق بصريًا من خلال Settings UI. لمزيد من المعلومات ، راجع إعدادات المنطقة الزمنية .
  • استخدم سطر الأوامر من خلال adb:

    • لتفريغ حالة time_zone_detector ، استخدم adb shell cmd time_zone_detector dump
    • لتغيير إعدادات الجهاز ، استخدم أوامر time_zone_detector الأخرى. لمزيد من المعلومات ، استخدم adb shell cmd time_zone_detector help .

فيما يلي مثال على الإخراج من أمر adb shell cmd time_zone_detector dump ، مع المعلومات حول الأصل الحالي وحالة الخدمة بالخط العريض:

$ adb shell cmd time_zone_detector dump
TimeZoneDetectorStrategy:
  mEnvironment.getCurrentUserId()=0
  mEnvironment.getConfiguration(currentUserId)=ConfigurationInternal{mUserId=0, mUserConfigAllowed=true, mTelephonyDetectionSupported=true, mGeoDetectionSupported=true, mAutoDetectionEnabled=true, mLocationEnabled=true, mGeoDetectionEnabled=true}
  [Capabilities=TimeZoneCapabilitiesAndConfig{mCapabilities=TimeZoneDetectorCapabilities{mUserHandle=UserHandle{0}, mConfigureAutoDetectionEnabledCapability=40, mConfigureGeoDetectionEnabledCapability=40, mSuggestManualTimeZoneCapability=30}, mConfiguration=TimeZoneConfiguration{mBundle=Bundle[{geoDetectionEnabled=true, autoDetectionEnabled=true}]}}]
  mEnvironment.isDeviceTimeZoneInitialized()=true
  mEnvironment.getDeviceTimeZone()=Europe/London
  Time zone change log:
  Manual suggestion history:
...
  Geolocation suggestion history:
...
  Telephony suggestion history:
...

يمكن تفسير المعلومات على النحو التالي:

مفتاح قيمة
mUserConfigAllowed ما إذا كان قد تم منع المستخدم من التحكم في إعدادات التاريخ والوقت بواسطة وحدة التحكم في سياسة الجهاز .
mTelephonyDetectionSupported ما إذا كان الجهاز يحتوي على اكتشاف المنطقة الزمنية الهاتفية أم لا.
mGeoDetectionSupported ما إذا كان الجهاز يحتوي على اكتشاف المنطقة الزمنية للموقع أم لا. هذه هي الحالة الفعالة بناءً على التكوين ووجود LTZP واحد على الأقل.
mAutoDetectionEnabled ما إذا كان الكشف التلقائي عن المنطقة الزمنية ممكّنًا أم لا.
mLocationEnabled تبديل الموقع الرئيسي.
mGeoDetectionEnabled رمز التبديل الأصلي: "خطأ" يشير إلى أصل الاتصال الهاتفي ، ويشير "صواب" إلى أصل الموقع.

تشير معلومات سجل الاقتراحات إلى الاقتراحات التي تم إجراؤها من خلال الإعدادات (يدويًا) ومن خلال أصول الاتصال الهاتفي والموقع.