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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

تبديل.

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

عندما يقوم المستخدم بإدخال الوقت يدويًا، فإنه يقوم بإدخال التوقيت المحلي الخاص به، وليس وقت Unix. يتم حساب وقت عصر 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 14 حدًا زمنيًا أعلى لاقتراحات الوقت التي تتلقاها خدمة time_detector . إذا كان الجهاز يدعم عمليات 32 بت، فسيقوم إطار العمل بتعيين حد زمني أعلى لمنع الجهاز من استخدام اقتراح زمني قد يؤدي إلى حدوث مشكلة Y2038.

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

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

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

يوفر هذا القسم معلومات حول كيفية تصحيح واختبار سلوك خدمة 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_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 : معينة وغير مؤكدة . فيما يلي أمثلة لأنواع الاقتراحات:

  • النوع = uncertain ، zoneIds = []

    • الخوارزمية لا تعرف ما هي المنطقة الزمنية.
  • النوع = certain ، zoneIds = ["Europe/London"]

    • الخوارزمية متأكدة من أن المنطقة هي أوروبا/لندن.
  • النوع = certain ، zoneIds = [] `

    • الخوارزمية مؤكدة، لكن لا يوجد معرف منطقة مرتبط بالموقع الحالي.
  • النوع = certain ، 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 استخدام اقتراحات الكشف عن الاتصالات الهاتفية مؤقتًا في المواقف التي يتعذر فيها اكتشاف الموقع اكتشاف المنطقة الزمنية أو عندما يستغرق اكتشاف الموقع وقتًا أطول لاكتشاف المنطقة الزمنية مقارنة باكتشاف الاتصال الهاتفي.

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

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

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

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

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

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

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

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

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

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

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

تبديل.

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

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

تبديل.

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

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

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

تبديل.

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

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

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

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

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

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

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

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

        • تُستخدم الإشارات الهاتفية للكشف عن المنطقة الزمنية.

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

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

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

الأجهزة التي تدعم فقط خوارزمية اكتشاف المنطقة الزمنية للموقع

يصف هذا القسم سلوك الأجهزة التي تدعم خوارزمية الموقع فقط.

  • أندرويد 14 والإصدارات الأحدث

    • لا يظهر خيار استخدام الموقع للمستخدمين في تطبيق إعدادات AOSP ويتصرف الجهاز كما لو تم تمكين خيار استخدام الموقع .
    • يتم تجاهل قيمة إعداد SettingsProvider على نطاق المستخدم location_time_zone_detection_enabled . تسجل هذه القيمة تفضيل المستخدم لأنواع الأجهزة الأخرى.
  • أندرويد 12 أو أندرويد 13

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

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

عندما يقوم المستخدم بتبديل اكتشاف المنطقة الزمنية من يدوي إلى تلقائي ، فقد يكون 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 . لمزيد من المعلومات، راجع اكتشاف المنطقة الزمنية للموقع .

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

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

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

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

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

يعتمد على MCC وصحة 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 والتأثير عليها، استخدم أحد الخيارات التالية:

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

    • لتفريغ حالة 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 مفتاح الخوارزمية: يشير false إلى خوارزمية الاتصال الهاتفي، ويشير true إلى خوارزمية الموقع.

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