مروری بر زمان

این صفحه نحوه عملکرد تشخیص منطقه زمانی و زمانی را در Android توضیح می‌دهد. این شامل نحوه تشخیص خودکار زمان و مناطق زمانی Android، گزینه‌های پیکربندی برای سازندگان دستگاه و اطلاعات تست می‌شود.

مروری بر زمان و مناطق زمانی

برای تعیین زمان محلی کاربر برای نمایش در مکان‌هایی مانند نوار وضعیت، Android دو حالت مرتبط اما مستقل را دنبال می‌کند:

  • زمان فعلی یونیکس
  • منطقه زمانی فعلی

زمان فعلی یونیکس و منطقه زمانی کنونی حالت‌های سراسر دستگاه هستند، به این معنی که توسط همه کاربران یک دستگاه به اشتراک گذاشته می‌شوند.

زمان فعلی یونیکس یک مقدار ثابت نیست. به طور خودکار به روز می شود تا گذر زمان را منعکس کند. علاوه بر گذشت زمان عادی، زمان فعلی یونیکس یک دستگاه در صورتی که نادرست باشد، برای مثال، پس از قطع برق دستگاه، تنظیم می‌شود.

منطقه زمانی فعلی تنظیمی را که برای تبدیل زمان فعلی یونیکس به زمان محلی انجام می شود، تعیین می کند. به عنوان مثال، در طول تابستان در لس آنجلس، دستگاه 7 ساعت از زمان فعلی یونیکس را کم می کند و در زمستان 8 ساعت را کم می کند.

برای پشتیبانی از این محاسبات زمانی محلی، همه دستگاه‌های Android دارای یک پایگاه داده از همه قوانین منطقه زمانی جهانی هستند. برای اطلاعات بیشتر در مورد قوانین منطقه زمانی، قوانین منطقه زمانی را ببینید.

وقتی کاربر به مکان جدیدی سفر می‌کند که از منطقه زمانی متفاوتی استفاده می‌کند، زمان فعلی یونیکس نیازی به تنظیم ندارد، اما کاربر معمولاً می‌خواهد زمان محلی را به جای زمان در مکان قبلی خود ببیند. تغییر منطقه زمانی فعلی تضمین می‌کند که افست صحیح در زمان فعلی یونیکس اعمال می‌شود تا زمان محلی صحیح برای مکان جدید نمایش داده شود.

AOSP به کاربران اجازه می دهد تا به طور مستقل کنترل کنند که آیا زمان و منطقه زمانی برای آنها به طور خودکار از طریق مکانیسم های زیر تنظیم می شود.

  • تشخیص خودکار زمان: اطمینان حاصل می کند که دستگاه دارای زمان یونیکس فعلی صحیح است.
  • تشخیص خودکار منطقه زمانی: اطمینان حاصل می کند که دستگاه دارای منطقه زمانی صحیح فعلی است.

تشخیص خودکار زمان

این بخش یک نمای کلی از سرویس time_detector ارائه می دهد که تشخیص خودکار زمان، کنترل های کاربر، گزینه های پیکربندی و جزئیات آزمایش را مدیریت می کند.

سرویس time_detector

سرویس time_detector که در دستگاه‌های دارای Android 10 یا بالاتر وجود دارد، تشخیص خودکار زمان را مدیریت می‌کند. در صورت فعال بودن تشخیص خودکار زمان، زمان یونیکس فعلی دستگاه را در صورت نیاز تنظیم می کند.

سرویس time_detector همیشه در یکی از دو حالت است: نامشخص یا قطعی . وضعیت قطعی یا نامطمئن سرویس با پیشنهادات زمانی که از منابع مختلف دریافت می کند تعیین می شود.

هنگامی که سرویس time_detector مشخص است، به این معنی که یک پیشنهاد با اطلاعات زمان دوره یونیکس دریافت کرده است، اگر زمان پیشنهادی با زمان فعلی یونیکس متفاوت باشد، زمان فعلی یونیکس را لغو می کند.

وقتی time_detector نامشخص است، زمان فعلی را لغو نمی کند. حالت نامشخص معمولاً به این معنی است که سرویس time_detector پیشنهادات زمانی را دریافت نکرده است. سرویس time_detector همچنین اگر پیشنهاداتی که دریافت کرده است برای استفاده خیلی قدیمی در نظر گرفته شود نامشخص می شود. سن پیشنهادها در نظر گرفته می‌شود، زیرا تنظیمات با استفاده از پیشنهادات زمان قدیمی یونیکس به ساعت بیدرنگ سپری شده روی دستگاه بستگی دارد، که در دوره‌های طولانی نادرست فرض می‌شود.

برای تعیین خودکار زمان فعلی یونیکس، یک دستگاه منابع مختلفی دارد که می تواند از آن استفاده کند. در این سند به اینها مبدا گفته می شود. سرویس time_detector توالی پیشنهادات را بر اساس منشأ آنها متمایز می کند.

سرویس time_detector حالتی است، به این معنی که رکوردی از جدیدترین پیشنهادهای ارائه شده توسط هر منبع را نگه می دارد. در صورتی که مبدا اطلاعات مربوط به زمان یونیکس جدیدتری در دسترس داشته باشد، پیشنهادات جدیدی به time_detector ارائه می‌شود. سرویس time_detector پیشنهادات جدید و موجود را دوباره ارزیابی می‌کند و هنگام دریافت پیشنهادها، وضعیت دستگاه را به‌روزرسانی می‌کند.

اگرچه زمان UTC در سطح بین المللی توافق شده است، دلایل مختلفی وجود دارد که نشان می دهد زمان فعلی یونیکس همیشه برای یک دستگاه اندرویدی ساده نیست:

  • زمان یونیکس یک سیستم زمان سنجی متفاوت از زمان UTC است. تبدیل بین این دو مستلزم آگاهی از زمان وقوع ثانیه های کبیسه و نحوه مدیریت آنها توسط مبدا است.
  • مبداها ممکن است فقط در زمان‌های خاص یا تحت شرایط خاصی در دسترس باشند. به عنوان مثال، اگر مبدا نیاز به اتصال شبکه داشته باشد، ممکن است فقط زمانی که دستگاه به اینترنت متصل است در دسترس باشد.
  • ممکن است ریشه ها نادرست یا نادرست باشند یا دارای خطا باشند. برای مثال، اگر دکل تلفن همراه «زمان جهانی» را به درستی ردیابی نکند، مبدأ تلفن ممکن است پیشنهادات زمانی نادرستی ارائه دهد.
  • ممکن است هنگام به دست آوردن زمان دوره یونیکس، نادرستی هایی وجود داشته باشد. به عنوان مثال، تأخیر شبکه، بافر یا زمان‌بندی فرآیند ممکن است باعث شود که زمان یونیکس نادرست باشد.
  • ساعت مرجع مورد استفاده برای تنظیم یک پیشنهاد برای زمان سپری شده از زمان دریافت پیشنهاد ممکن است نادرست باشد.

دو مبدا تشخیص زمان اصلی برای استفاده به طور پیش فرض در AOSP پیکربندی شده است:

  • شبکه : از سرورهای زمان پروتکل زمان شبکه (NTP) استفاده می کند.
  • تلفن: از سیگنال های تلفنی هویت شبکه و منطقه زمانی (NITZ) استفاده می کند.

هم مبدا تلفن و هم شبکه نیاز به اتصال به شبکه های خارجی دارند که همیشه در دسترس نیستند.

با شروع اندروید 12، اندروید از مبداهای زیر نیز پشتیبانی می کند که به طور پیش فرض برای استفاده پیکربندی نشده اند:

  • GNSS : از ارائه دهنده موقعیت مکانی GPS برای دریافت زمان از منبع GNSS استفاده می کند.
  • خارجی : منشأ عمومی که به سازندگان دستگاه اجازه می دهد تا منبع خود را از زمان یونیکس ادغام کنند.

تنظیمات زمان

کاربران می توانند تشخیص خودکار زمان را در سیستم > تاریخ و زمان در برنامه تنظیمات AOSP فعال کنند.

تشخیص خودکار زمان در تنظیمات

شکل 1. تشخیص خودکار زمان در تنظیمات.

جدول زیر کنترل های کاربر برای تشخیص زمان در برنامه تنظیمات AOSP را توضیح می دهد.

*در اندروید 11 و پایین‌تر، این تنظیم با برچسب استفاده از زمان ارائه‌شده توسط شبکه است

مکان تنظیمات AOSP نام تنظیمات AOSP محدوده رفتار - اخلاق
سیستم > تاریخ و زمان تنظیم زمان به صورت خودکار* تمام کاربران

یک ضامن.

وقتی روشن است ، دستگاه مسئول تشخیص زمان فعلی یونیکس است. هنگامی که خاموش است ، کنترل‌هایی در اختیار کاربران قرار می‌گیرد تا زمان دستگاه را به صورت دستی تنظیم کنند.

وقتی کاربر زمان را به صورت دستی وارد می کند، زمان محلی خود را وارد می کند، نه زمان یونیکس. زمان فعلی یونیکس با استفاده از منطقه زمانی فعلی برای استخراج زمان یونیکس محاسبه می‌شود.

پیکربندی

سازندگان دستگاه‌ها می‌توانند سرویس 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>

در اندروید 12، پیشنهادات شبکه و تلفن به‌عنوان مبدا برای استفاده به‌طور پیش‌فرض پیکربندی شده‌اند. پیشنهادات زمان شبکه بالاتر از پیشنهادات زمان تلفن در اولویت هستند. سازندگان دستگاه می‌توانند ترتیب مبدا را تغییر دهند تا به رفتار اندروید 11 یا پایین‌تر برگردند، جایی که تلفن اولویت بیشتری دارد.

به طور پیش‌فرض، اگر پیشنهاد معتبر با بالاترین اولویت با زمان ساعت سیستم فعلی دستگاه در عرض چند ثانیه مطابقت داشته باشد، زمان دستگاه تغییر نخواهد کرد. این برای جلوگیری از ایجاد کار برای برنامه‌های نصب‌شده است که به هدف ACTION_TIME_CHANGED گوش می‌دهند.

مقادیر مبدا مجاز عبارتند از:

محدودیت های زمانی مجاز

اندروید 14 محدودیت زمانی بالایی برای پیشنهادات زمانی دریافت شده توسط سرویس time_detector معرفی می کند. اگر دستگاه از پردازش‌های 32 بیتی پشتیبانی می‌کند، چارچوب یک محدودیت زمانی بالایی تعیین می‌کند تا از استفاده دستگاه از پیشنهاد زمانی که می‌تواند مشکل Y2038 را ایجاد کند، جلوگیری کند.

اندروید 12 محدودیت زمانی کمتری را معرفی کرد که برای اعتبارسنجی پیشنهادات زمانی دریافتی توسط سرویس time_detector استفاده می‌شود. مقدار محدود زمانی کمتری که برای پیشنهادهای خودکار استفاده می‌شود، از مهر زمان ساخت تنظیم می‌شود. این بر این اصل کار می کند که یک زمان معتبر نمی تواند قبل از ساخته شدن تصویر سیستم دستگاه باشد. اگر یک پیشنهاد زمانی قبل از محدودیت زمانی پایین‌تر باشد، سرویس time_detector آن پیشنهاد را رد می‌کند زیرا اگر مهر زمانی ساخت درست باشد، نمی‌تواند معتبر باشد.

برای دستگاه‌هایی که Android 11 یا پایین‌تر دارند، سرویس time_detector پیشنهادات زمان دوره یونیکس ورودی را تأیید نمی‌کند.

زمان اشکال زدایی و تست

این بخش اطلاعاتی در مورد نحوه اشکال زدایی و آزمایش رفتار سرویس 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 زمان فعلی یونیکس دستگاه را تغییر داده است.

اطلاعات تاریخچه پیشنهادات نشان می دهد که چه پیشنهاداتی توسط هر منبع ارائه شده است.

تشخیص خودکار منطقه زمانی

این بخش یک نمای کلی از سرویس 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 مطابقت دارند: قطعی و نامشخص . موارد زیر نمونه هایی از انواع پیشنهادات هستند:

  • type = uncertain ، zoneIds = []

    • الگوریتم نمی داند منطقه زمانی چیست.
  • type = certain , zoneIds = ["Europe/London"]

    • الگوریتم مطمئن است که منطقه اروپا/لندن است.
  • type = certain ، zoneIds = [] `

    • الگوریتم قطعی است، اما هیچ شناسه منطقه ای مرتبط با مکان فعلی وجود ندارد.
  • type = certain , zoneIds = ["America/Denver", "America/Phoenix"]

    • الگوریتم مطمئن است که پاسخ یکی از دو منطقه است، اما نمی تواند بین "America/Denver" و "America/Phoenix" یکی را انتخاب کند.

سرویس time_zone_detector توالی پیشنهادات را بر اساس الگوریتم آنها متمایز می کند. بسته به الگوریتم، پیشنهادها ممکن است حاوی ابرداده‌هایی باشند که نشان می‌دهد الگوریتم چقدر مطمئن است.

سرویس time_zone_detector حالتی است، به این معنی که رکوردی از جدیدترین پیشنهادهای ارائه شده توسط هر الگوریتم را نگه می‌دارد. اگر پیشنهاد قبلی دیگر درست نباشد، پیشنهادات جدید به سرویس time_zone_detector ارسال می‌شود. یعنی اگر الگوریتمی اکنون پیشنهاد متفاوتی داشته باشد یا توانایی تشخیص منطقه زمانی را از دست داده باشد. سرویس time_zone_detector پیشنهادات جدید و موجود را دوباره ارزیابی می‌کند و هنگام دریافت پیشنهادها، وضعیت دستگاه را به‌روزرسانی می‌کند.

اندروید از دو الگوریتم برای تشخیص منطقه زمانی پشتیبانی می کند:

  • تلفن
  • محل

سرویس time_zone_detector معمولاً از یک الگوریتم واحد برای تعیین منطقه زمانی استفاده می کند. هنگامی که الگوریتم مکان در دستگاهی پشتیبانی می‌شود، الگوریتمی که دستگاه استفاده می‌کند بر اساس تنظیمات منطقه زمانی پیکربندی شده توسط کاربر تعیین می‌شود. وقتی الگوریتم در حال استفاده از منطقه زمانی نامشخص می شود، time_zone_detector معمولاً از پیشنهادات الگوریتم دیگری استفاده نمی کند. پیشنهادات مرتبط با الگوریتم‌هایی که استفاده نمی‌شوند را می‌توان توسط time_zone_detector در حافظه نگه داشت، اما از آنها استفاده نمی‌شود مگر اینکه الگوریتم تغییر کند. هنگامی که کاربر تنظیمات تشخیص خودکار منطقه زمانی را تغییر می‌دهد و الگوریتم تغییر می‌کند، جدیدترین پیشنهاد موجود برای الگوریتم جدید استفاده می‌شود.

برای جزئیات در مورد وضعیتی که در آن الگوریتم‌های متعدد برای تعیین منطقه زمانی استفاده می‌شود، به حالت بازگشتی تلفنی مراجعه کنید.

حالت بازگشتی تلفنی

در دستگاه‌های دارای Android نسخه 13 و بالاتر، سرویس time_zone_detector از حالت بازگشت تلفنی پشتیبانی می‌کند. این حالت به Android امکان می‌دهد در شرایطی که تشخیص موقعیت مکانی قادر به تشخیص منطقه زمانی نیست یا زمانی که تشخیص مکان برای تشخیص منطقه زمانی بیشتر از تشخیص تلفن طول می‌کشد، به طور موقت از پیشنهادات تشخیص تلفن استفاده کند.

حالت بازگشتی تلفنی برای دستگاه‌هایی اعمال می‌شود که در آن‌ها هم تلفن و هم تشخیص موقعیت مکانی پشتیبانی می‌شوند و کاربر استفاده از مکان را برای تنظیم منطقه زمانی در تنظیمات منطقه زمانی فعال کرده است. این حالت به طور خودکار هنگام راه اندازی مجدد دستگاه و هنگامی که حالت هواپیما غیرفعال است فعال می شود.

در اندروید 14 و بالاتر، بازگشت تلفنی را می‌توان از طریق APIهای گزارش وضعیت LTZP فعال کرد، یعنی اگر LTZP گزارش دهد که نامشخص است و توانایی آن برای تشخیص مکان یا منطقه زمانی توسط محیطش کاهش می‌یابد، حالت بازگشت تلفن فعال می‌شود.

هنگامی که در حالت بازگشتی تلفنی است، سرویس time_zone_detector از پیشنهادات تلفنی استفاده می کند، گویی تشخیص مکان غیرفعال است تا زمانی که الگوریتم مکان پیشنهاد خاصی را ارائه دهد. پس از دریافت یک پیشنهاد خاص، حالت بازگشت تلفنی غیرفعال می شود و به طور انحصاری از پیشنهادات مکان استفاده می شود.

برای جزئیات پیکربندی حالت برگشت تلفن، به پیکربندی تشخیص منطقه زمانی مراجعه کنید.

تنظیمات منطقه زمانی

کاربران می توانند تنظیمات را برای تشخیص خودکار منطقه زمانی در برنامه تنظیمات AOSP فعال و پیکربندی کنند.

تشخیص خودکار منطقه زمانی در تنظیمات

شکل 2. تشخیص خودکار منطقه زمانی در تنظیمات.

جدول زیر کنترل‌های کاربر برای تشخیص منطقه زمانی در برنامه تنظیمات AOSP را توضیح می‌دهد.

*در اندروید 11 و پایین‌تر، این تنظیم با برچسب استفاده از منطقه زمانی ارائه‌شده توسط شبکه است

مکان تنظیمات AOSP نام تنظیمات AOSP محدوده رفتار - اخلاق
سیستم > تاریخ و زمان تنظیم منطقه زمانی به صورت خودکار* تمام کاربران

یک ضامن.

وقتی روشن است ، دستگاه مسئول تشخیص منطقه زمانی فعلی است. هنگامی که خاموش است ، کنترل‌هایی در اختیار کاربران قرار می‌گیرد تا منطقه زمانی دستگاه را به صورت دستی تنظیم کنند.

سیستم > تاریخ و زمان از مکان برای تنظیم منطقه زمانی استفاده کنید کاربر فعلی

یک ضامن.

موجود در Android 12. این کلید تنها زمانی نمایش داده می‌شود که تشخیص منطقه زمانی مکان در دستگاه پشتیبانی شود.

برای تغییرات معرفی شده در 14، به دستگاه هایی که فقط از تشخیص منطقه زمانی مکان پشتیبانی می کنند مراجعه کنید.

محل از موقعیت مکانی استفاده کنید کاربر فعلی

یک ضامن.

به طور کلی استفاده از مکان دستگاه را اجازه می دهد یا از آن جلوگیری می کند. اگر تشخیص منطقه زمانی مکان در دستگاه پشتیبانی شود، این مقدار مرتبط است.

در زیر یک نمای کلی از رفتار دستگاه برای تشخیص منطقه زمانی با توجه به تنظیمات انتخاب شده توسط کاربر ارائه می شود:

  • [تاریخ و زمان] تنظیم منطقه زمانی به صورت خودکار: خاموش

    • کاربر باید به صورت دستی منطقه زمانی را انتخاب کند.
  • [تاریخ و زمان] تنظیم منطقه زمانی به صورت خودکار: روشن

    • [مکان] استفاده از مکان: خاموش

      • سیگنال های تلفن برای تشخیص منطقه زمانی استفاده می شود.
    • [مکان] استفاده از مکان: روشن

      • [تاریخ و زمان] از مکان برای تنظیم منطقه زمانی استفاده کنید: روشن

        • مکان برای تشخیص منطقه زمانی استفاده می شود.
      • [تاریخ و زمان] از مکان برای تنظیم منطقه زمانی استفاده کنید: خاموش

        • سیگنال های تلفن برای تشخیص منطقه زمانی استفاده می شود.

دستگاه های چند کاربره

از آنجایی که تعداد زیادی از تنظیمات مربوط به کاربر فعلی است، رفتار تشخیص منطقه زمانی دستگاه می‌تواند با تغییر کاربر فعلی در یک دستگاه Android چند کاربره تغییر کند.

استفاده از موقعیت مکانی برای تنظیم جابجایی منطقه زمانی به کاربر فعلی اختصاص دارد و توسط خط‌مشی دستگاه محدود نمی‌شود، به این معنی که کاربران همیشه می‌توانند مقدار آن را تغییر دهند، حتی زمانی که تنظیم منطقه زمانی به‌طور خودکار خاموش است یا اگر زمان یا منطقه زمانی دیگر کنترل می‌شود. توسط Device Policy Controller محدود شده اند.

دستگاه هایی که فقط از الگوریتم تشخیص منطقه زمانی مکان پشتیبانی می کنند

این بخش رفتار دستگاه هایی را که فقط از الگوریتم مکان پشتیبانی می کنند، توضیح می دهد.

  • اندروید 14 و بالاتر

    • گزینه استفاده از موقعیت مکانی به کاربران در برنامه تنظیمات AOSP نشان داده نمی شود و دستگاه طوری رفتار می کند که گویی گزینه استفاده از موقعیت مکانی فعال است.
    • مقدار تنظیمات SettingsProvider با محدوده کاربر location_time_zone_detection_enabled نادیده گرفته می شود. این مقدار اولویت کاربر را در انواع دیگر دستگاه ها ثبت می کند.
  • اندروید 12 یا اندروید 13

    • گزینه Use location برای کاربران در برنامه تنظیمات AOSP قابل مشاهده است و کاربران می توانند این گزینه را غیرفعال کنند. اگر این گزینه غیرفعال باشد، دستگاه به طور خودکار منطقه زمانی را تشخیص نمی دهد.

رفتار هنگام تغییر به و از تشخیص خودکار

وقتی کاربر تشخیص منطقه زمانی را از دستی به خودکار تغییر می‌دهد، time_zone_detector ممکن است از قبل از منطقه زمانی فعلی مطمئن باشد. در این صورت، از آنجایی که کاربر تشخیص خودکار را فعال می کند، منطقه زمانی دستگاه ممکن است همزمان تغییر کند تا با نظر سرویس time_zone_detector مطابقت داشته باشد.

به طور مشابه، زمانی که کاربر تغییری در تنظیمات ایجاد می‌کند که منجر به تغییر در الگوریتم فعلی سرویس time_zone_detector می‌شود، time_zone_detector ممکن است قبلاً پیشنهاداتی برای الگوریتم جدید دریافت کرده باشد و بنابراین زمان دستگاه ممکن است بلافاصله با نظر سرویس time_zone_detector مطابقت داشته باشد.

تشخیص منطقه زمانی تلفن

تشخیص منطقه زمانی تلفن از سیگنال های تلفنی برای تعیین منطقه زمانی فعلی استفاده می کند. برای اطلاعات بیشتر، به تشخیص منطقه زمانی تلفن مراجعه کنید.

تشخیص منطقه زمانی مکان

تشخیص منطقه زمانی مکان در Android 12 یا بالاتر در دسترس است. این یک ویژگی تشخیص خودکار منطقه زمانی اختیاری است که به دستگاه ها امکان می دهد از مکان خود برای تعیین منطقه زمانی فعلی استفاده کنند.

سرویس location_time_zone_manager که در اندروید 12 معرفی شده است، در سرور سیستم اجرا می شود و حاوی کدی است که مسئول ارسال پیشنهادات الگوریتم موقعیت مکانی به سرویس time_zone_detector است. برای اطلاعات بیشتر، به تشخیص منطقه زمانی مکان مراجعه کنید.

ملاحظات پذیرش ویژگی

این بخش جنبه‌هایی از ویژگی تشخیص منطقه زمانی مکان را توضیح می‌دهد تا به سازنده دستگاه کمک کند تا تعیین کند که آیا این ویژگی را در یک دستگاه بپذیرد یا نه.

مقایسه تلفن و تشخیص مکان

جدول زیر مقایسه ای از مزایا و معایب استفاده از مکان به جای سیگنال های تلفنی برای تشخیص منطقه زمانی ارائه می دهد.

تشخیص تلفن تشخیص موقعیت مکانی
صحت بسته به کشور متفاوت است.

به صحت MCC، NITZ و در دسترس بودن بستگی دارد.
بستگی به پیکربندی ویژگی یا اجزای افزونه دارد.

صحت معمولاً در موارد زیر متفاوت است:
  • دقت و منظم بودن ارائه دهنده مکان.
  • کیفیت داده های نقشه منطقه زمانی.
قابلیت به روز رسانی تشخیص تلفن به فایل‌های موجود در ماژول داده منطقه زمانی قابل به‌روزرسانی (com.android.tzdata APEX) متکی است. بستگی به پیکربندی ویژگی یا اجزای افزونه دارد.

قابلیت به روز رسانی معمولاً به این بستگی دارد که آیا دستگاه از داده های نقشه منطقه زمانی سرور یا مشتری استفاده می کند.

توجه: داده‌های نقشه منطقه زمانی در ماژول داده منطقه زمانی که برای به‌روزرسانی نسخه TZDB 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 از حالت بازگشتی تلفنی استفاده می کند. این برای اندروید 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 ، از یکی از گزینه های زیر استفاده کنید:

  • به صورت بصری از طریق تنظیمات رابط کاربری بررسی کنید. برای اطلاعات بیشتر، تنظیمات منطقه زمانی را ببینید.
  • از خط فرمان از طریق 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 اینکه آیا کاربر از کنترل تنظیمات تاریخ و زمان توسط Device Policy Controller جلوگیری می کند یا خیر.
mTelephonyDetectionSupported آیا دستگاه دارای تشخیص منطقه زمانی تلفن است یا خیر.
mGeoDetectionSupported آیا دستگاه از تشخیص منطقه زمانی مکان پشتیبانی می کند یا خیر. این حالت مؤثر بر اساس پیکربندی و وجود حداقل یک LTZP است.
mAutoDetectionEnabled آیا تشخیص خودکار منطقه زمانی فعال است یا خیر.
mLocationEnabled تغییر مکان اصلی
mGeoDetectionEnabled کلید الگوریتم: false نشان دهنده الگوریتم تلفن و true نشان دهنده الگوریتم مکان است.

اطلاعات تاریخچه پیشنهادات نشان می دهد که چه پیشنهاداتی از طریق تنظیمات (دستی) و توسط الگوریتم های تلفن و مکان ارائه شده است.