این صفحه نحوهی عملکرد تشخیص زمان و منطقهی زمانی در اندروید را شرح میدهد. این شامل نحوهی تشخیص خودکار مناطق زمانی و زمانی توسط اندروید، گزینههای پیکربندی برای تولیدکنندگان دستگاه و اطلاعات آزمایش میشود.
مرور کلی بر زمان و مناطق زمانی
برای تعیین زمان محلی کاربر جهت نمایش در مکانهایی مانند نوار وضعیت، اندروید دو وضعیت مرتبط اما مستقل را پیگیری میکند:
- زمان فعلی عصر یونیکس
- منطقه زمانی فعلی
زمان فعلی عصر یونیکس و منطقه زمانی فعلی، حالتهای مربوط به کل دستگاه هستند، به این معنی که توسط همه کاربران یک دستگاه به اشتراک گذاشته میشوند.
زمان فعلی Unix epoch یک مقدار ثابت نیست. این مقدار به طور خودکار بهروزرسانی میشود تا گذشت زمان را منعکس کند. علاوه بر گذشت زمان عادی، زمان فعلی Unix epoch یک دستگاه در صورت نادرست بودن، مثلاً پس از قطع برق، تنظیم میشود.
منطقه زمانی فعلی، تنظیماتی را که باید برای تبدیل زمان فعلی عصر یونیکس به زمان محلی انجام شود، تعیین میکند. به عنوان مثال، در طول تابستان در لسآنجلس، دستگاه ۷ ساعت و در زمستان ۸ ساعت از زمان فعلی عصر یونیکس کم میکند.
برای پشتیبانی از این محاسبات زمان محلی، همه دستگاههای اندروید دارای یک پایگاه داده از تمام قوانین منطقه زمانی جهانی هستند. برای اطلاعات بیشتر در مورد قوانین منطقه زمانی، به قوانین منطقه زمانی مراجعه کنید.
وقتی کاربری به مکان جدیدی سفر میکند که از منطقه زمانی متفاوتی استفاده میکند، نیازی به تنظیم زمان فعلی Unix epoch نیست، اما کاربر معمولاً میخواهد به جای زمان مکان قبلی خود، زمان محلی را ببیند. تغییر منطقه زمانی فعلی تضمین میکند که انحراف صحیح به زمان فعلی Unix epoch اعمال میشود تا زمان محلی صحیح برای مکان جدید نمایش داده شود.
AOSP به کاربران اجازه میدهد تا از طریق مکانیسمهای زیر، به طور مستقل کنترل کنند که آیا زمان و منطقه زمانی به طور خودکار برای آنها تنظیم میشود یا خیر.
- تشخیص خودکار زمان: تضمین میکند که دستگاه زمان فعلی Unix epoch صحیحی دارد.
- تشخیص خودکار منطقه زمانی: تضمین میکند که دستگاه منطقه زمانی فعلی صحیحی دارد.
تشخیص خودکار زمان
این بخش مروری بر سرویس time_detector ارائه میدهد که تشخیص خودکار زمان، کنترلهای کاربر، گزینههای پیکربندی و جزئیات آزمایش را مدیریت میکند.
سرویس time_detector
سرویس time_detector که در دستگاههای دارای اندروید ۱۰ یا بالاتر وجود دارد، تشخیص خودکار زمان را مدیریت میکند. این سرویس در صورت فعال بودن تشخیص خودکار زمان، زمان فعلی یونیکس دستگاه را در صورت نیاز تنظیم میکند.
سرویس time_detector همیشه در یکی از دو حالت زیر است: certain یا uncertain . حالت certain یا uncertain سرویس توسط پیشنهادهای زمانی که از منابع مختلف دریافت میکند، تعیین میشود.
وقتی سرویس time_detector به certain برسد، به این معنی که پیشنهادی با اطلاعات زمان Unix epoch دریافت کرده باشد، اگر پیشنهاد زمان با زمان Unix epoch فعلی متفاوت باشد، زمان Unix epoch فعلی را لغو میکند.
وقتی time_detector uncertain باشد، زمان فعلی را نادیده نمیگیرد. حالت uncertain معمولاً به این معنی است که سرویس time_detector پیشنهادهای زمانی دریافت نکرده است. اگر پیشنهادهایی که دریافت کرده است برای استفاده خیلی قدیمی در نظر گرفته شوند، سرویس time_detector نیز uncertain میشود. سن پیشنهادها در نظر گرفته میشود زیرا تنظیمات با استفاده از پیشنهادهای زمانی قدیمی Unix epoch به ساعت بیدرنگ سپری شده روی دستگاه متکی هستند که فرض میشود در دورههای طولانی نادرست است.
برای تعیین خودکار زمان فعلی عصر یونیکس، یک دستگاه میتواند از منابع مختلفی استفاده کند. در این سند، این منابع، مبدأ نامیده میشوند. سرویس time_detector توالیهای پیشنهادها را بر اساس مبدأ آنها متمایز در نظر میگیرد.
سرویس time_detector دارای وضعیت است، به این معنی که آخرین پیشنهادهای ارائه شده توسط هر مبدا را ثبت میکند. اگر یک مبدا اطلاعات جدیدتری از زمان Unix epoch در دسترس داشته باشد، پیشنهادهای جدید به time_detector ارائه میشوند. سرویس time_detector پیشنهادهای جدید و موجود را مجدداً ارزیابی میکند و وضعیت دستگاه را هنگام دریافت پیشنهادها بهروزرسانی میکند.
اگرچه زمان UTC در سطح بینالمللی مورد توافق است، دلایل مختلفی وجود دارد که چرا تعیین زمان فعلی عصر یونیکس برای یک دستگاه اندرویدی همیشه ساده نیست:
- زمان عصر یونیکس یک سیستم زمانبندی کاملاً متفاوت از زمان UTC است. تبدیل بین این دو نیاز به دانش زمان وقوع ثانیههای کبیسه و نحوه مدیریت آنها توسط مبدا دارد.
- ممکن است Originها فقط در زمانها یا شرایط خاصی در دسترس باشند. برای مثال، اگر Origin به اتصال شبکه نیاز داشته باشد، ممکن است فقط در زمانی که دستگاه به اینترنت متصل است، در دسترس باشد.
- ممکن است مبداها نادرست یا غیردقیق باشند، یا دارای خطا باشند. برای مثال، اگر یک دکل تلفن همراه زمان UTC را به درستی ردیابی نکند، مبدا تلفن ممکن است پیشنهادهای زمانی نادرستی ارائه دهد.
- ممکن است هنگام بدست آوردن زمان Unix epoch اشتباهاتی رخ دهد. برای مثال، تأخیر شبکه، بافرینگ یا زمانبندی فرآیند ممکن است باعث شود زمان Unix epoch دقیق نباشد.
- ساعت مرجع مورد استفاده برای تنظیم پیشنهاد بر اساس زمان سپری شده از زمان دریافت پیشنهاد ممکن است نادرست باشد.
دو مبدا اصلی تشخیص زمان وجود دارد که به طور پیشفرض در AOSP پیکربندی شدهاند:
- شبکه : از سرورهای زمان پروتکل زمان شبکه (NTP) استفاده میکند.
- تلفن : از سیگنالهای تلفن با شناسه شبکه و منطقه زمانی (NITZ) استفاده میکند.
هم مبدا تلفن و هم مبدا شبکه نیاز به اتصال به شبکههای خارجی دارند که همیشه در دسترس نیستند.
با شروع از اندروید ۱۲، اندروید از ریشههای زیر نیز پشتیبانی میکند که به طور پیشفرض برای استفاده پیکربندی نشدهاند:
- GNSS : از ارائهدهنده موقعیت مکانی GPS برای دریافت زمان از منبع GNSS استفاده میکند.
- خارجی : منشأ عمومی که به تولیدکنندگان دستگاه اجازه میدهد منبع زمان عصر یونیکس خود را ادغام کنند.
تنظیمات زمان
کاربران میتوانند تشخیص خودکار زمان را در بخش سیستم > تاریخ و زمان در برنامه تنظیمات AOSP فعال کنند.

شکل ۱. تشخیص خودکار زمان در تنظیمات.
جدول زیر کنترلهای کاربر برای تشخیص زمان در برنامه تنظیمات AOSP را شرح میدهد.
*در اندروید ۱۱ و پایینتر، این تنظیم با عنوان « استفاده از زمان ارائه شده توسط شبکه» مشخص شده است | |||
| محل تنظیمات AOSP | نام تنظیمات AOSP | محدوده | رفتار |
|---|---|---|---|
| سیستم > تاریخ و زمان | تنظیم خودکار زمان* | همه کاربران | یک ضامن. وقتی روشن باشد ، دستگاه مسئول تشخیص زمان فعلی Unix epoch است. وقتی خاموش باشد ، به کاربران کنترلهایی برای تنظیم دستی زمان دستگاه ارائه میشود. |
وقتی کاربر زمان را به صورت دستی وارد میکند، زمان محلی خود را وارد میکند، نه زمان Unix epoch. زمان Unix epoch فعلی با استفاده از منطقه زمانی فعلی برای استخراج زمان Unix epoch محاسبه میشود.
پیکربندی
تولیدکنندگان دستگاه میتوانند سرویس time_detector را به روشهای مختلفی پیکربندی کنند، مانند اینکه از کدام مبدا استفاده کنند و چگونه سیگنالهای دریافتی از آنها را اولویتبندی کنند.
اولویتبندی مبدا
از اندروید ۱۲، تولیدکنندگان دستگاه میتوانند فایل پیکربندی core/res/res/values/config.xml را تغییر دهند تا مشخص کنند کدام مبدأهای زمانی در تشخیص خودکار زمان لحاظ شوند و time_detector این مبدأها را در چه اولویتی در نظر بگیرد.
برای دستگاههایی که اندروید ۱۱ یا پایینتر را اجرا میکنند، اولویت مبدا به صورت ["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>
در اندروید ۱۲، پیشنهادهای شبکه و تلفن به صورت پیشفرض به عنوان مبدا برای استفاده پیکربندی شدهاند. پیشنهادهای زمان شبکه بالاتر از پیشنهادهای زمان تلفن اولویتبندی میشوند. تولیدکنندگان دستگاه میتوانند ترتیب مبداها را تغییر دهند تا به رفتار اندروید ۱۱ یا پایینتر، که در آن تلفن اولویت بالاتری دارد، بازگردند.
به طور پیشفرض، اگر پیشنهاد معتبر با بالاترین اولویت با زمان ساعت سیستم فعلی دستگاه در عرض چند ثانیه مطابقت داشته باشد، زمان دستگاه تغییر نخواهد کرد. این کار برای جلوگیری از ایجاد کار برای برنامههای نصب شدهای است که به هدف ACTION_TIME_CHANGED گوش میدهند.
مقادیر مبدا مجاز عبارتند از:
محدودیتهای زمانی مجاز
اندروید ۱۴ یک محدوده زمانی بالا برای پیشنهادهای زمانی دریافت شده توسط سرویس time_detector معرفی میکند. اگر دستگاه از فرآیندهای ۳۲ بیتی پشتیبانی کند، این چارچوب یک محدوده زمانی بالا برای جلوگیری از استفاده دستگاه از پیشنهاد زمانی که میتواند باعث مشکل Y2038 شود، تعیین میکند.
اندروید ۱۲ یک محدوده زمانی پایینتر معرفی کرد که برای اعتبارسنجی پیشنهادهای زمانی دریافتشده توسط سرویس time_detector استفاده میشود. مقدار محدوده زمانی پایینتر مورد استفاده برای پیشنهادهای خودکار از برچسب زمانی ساخت تنظیم میشود. این روش بر این اصل کار میکند که یک زمان معتبر نمیتواند قبل از ساخت تصویر سیستم دستگاه باشد. اگر یک پیشنهاد زمانی قبل از محدوده زمانی پایینتر باشد، سرویس time_detector آن پیشنهاد را رد میکند زیرا اگر برچسب زمانی ساخت صحیح باشد، نمیتواند معتبر باشد.
برای دستگاههایی که اندروید ۱۱ یا پایینتر را اجرا میکنند، سرویس time_detector پیشنهادهای زمان Unix epoch ورودی را اعتبارسنجی نمیکند.
اشکالزدایی و آزمایش زمان
این بخش اطلاعاتی در مورد نحوه اشکالزدایی و آزمایش رفتار سرویس time_detector و سایر اجزایی که توسط همه originها به اشتراک گذاشته شدهاند، ارائه میدهد.
تعامل با سرویس 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 epoch دستگاه را تغییر داده است.
اطلاعات تاریخچه پیشنهادات نشان میدهد که چه پیشنهاداتی توسط هر مبدا ارائه شده است.
تشخیص خودکار منطقه زمانی
این بخش مروری بر سرویس time_zone_detector ارائه میدهد که تشخیص خودکار منطقه زمانی، کنترلهای کاربر در تنظیمات، تشخیص منطقه زمانی تلفن و مکان و جزئیات آزمایش را مدیریت میکند.
سرویس آشکارساز منطقه زمانی
سرویس time_zone_detector که در دستگاههای دارای اندروید ۱۱ یا بالاتر وجود دارد، تشخیص خودکار منطقه زمانی را مدیریت میکند. این سرویس در صورت فعال بودن تشخیص خودکار منطقه زمانی، منطقه زمانی فعلی دستگاه را در صورت نیاز تنظیم میکند.
وقتی تشخیص خودکار منطقه زمانی فعال باشد، time_zone_detector میتواند در یکی از دو حالت باشد: certain و uncertain .
وقتی سرویس time_zone_detector در حالت certain ) باشد، به این معنی است که سرویس time_zone_detector اطلاعات قوی در مورد منطقه زمانی دریافت کرده است که میتواند باعث شود منطقه زمانی فعلی را نادیده بگیرد. وقتی uncertain باشد، به این معنی است که هیچ اطلاعاتی دریافت نکرده یا فقط اطلاعات با اطمینان کم دریافت کرده است، به این معنی که منطقه زمانی فعلی را نادیده نخواهد گرفت.
حالتهای خاص سرویس time_zone_detector میتواند شامل مواردی باشد که time_zone_detector هیچ اطلاعات منطقه زمانی برای استفاده ندارد، یا جایی که چندین منطقه زمانی برای انتخاب دارد. این حالتها به شرح زیر است:
- حالت
certainبا منطقه زمانی صفر زمانی زمانی وارد میشود که دستگاه در جایی بدون منطقه زمانی باشد، مانند آبهای بینالمللی یا در منطقهای مورد مناقشه. این حالت مشابه حالت نامشخص است، اما نشان میدهد کهtime_zone_detectorنیازی به انجام اقدامات بیشتر برای تعیین منطقه زمانی ندارد. - حالتی
certainبا چندین منطقه زمانی وارد میشود که در آن ابهام یا شرایط مرزی وجود دارد. در این حالت، اگر منطقه زمانی فعلی یکی از مناطق زمانی باشد کهtime_zone_detectorدر مورد آن مطمئن است، منطقه زمانی فعلی به همان صورت باقی میماند. در غیر این صورت، یکی از مناطق زمانی موجود استفاده میشود. این امر بهtime_zone_detectorعنصری از پایداری میدهد، اگر کاربر قبلاً منطقه زمانی خود را به صورت دستی انتخاب کرده باشد یا با نزدیک شدن دستگاه به یک مرز.
وضعیت certain یا uncertain سرویس time_zone_detector توسط پیشنهادهای منطقه زمانی که توسط یک الگوریتم ارسال میشوند، تعیین میشود.
بهطورکلی، پیشنهادها در دو نوع ارائه میشوند که با حالتهای ممکن time_zone_detector مطابقت دارند: certain و uncertain . در زیر نمونههایی از انواع پیشنهادها آمده است:
نوع =
uncertain،zoneIds = []- الگوریتم منطقه زمانی را نمیداند.
type =
certain،zoneIds = ["Europe/London"]- الگوریتم مطمئن است که منطقه، اروپا/لندن است.
نوع =
certain،zoneIds = []`- الگوریتم قطعی است، اما هیچ شناسه منطقهای (zone ID) مرتبط با مکان فعلی وجود ندارد.
type =
certain،zoneIds = ["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 در حافظه نگهداری شوند، اما تا زمانی که الگوریتم تغییر نکند، از آنها استفاده نمیشود. هنگامی که کاربر تنظیمات تشخیص خودکار منطقه زمانی را تغییر میدهد و الگوریتم تغییر میکند، جدیدترین پیشنهاد موجود برای الگوریتم جدید استفاده میشود.
برای جزئیات بیشتر در مورد وضعیتی که چندین الگوریتم برای تعیین منطقه زمانی استفاده میشوند، به حالت پشتیبان تلفنی مراجعه کنید.
حالت پشتیبان تلفنی
در دستگاههایی که اندروید ۱۳ و بالاتر دارند، سرویس time_zone_detector از حالت جایگزین تلفن پشتیبانی میکند. این حالت به اندروید اجازه میدهد در موقعیتهایی که تشخیص موقعیت مکانی قادر به تشخیص منطقه زمانی نیست یا تشخیص موقعیت مکانی برای تشخیص منطقه زمانی بیشتر از تشخیص تلفن طول میکشد، به طور موقت از پیشنهادهای تشخیص تلفن استفاده کند.
حالت پشتیبان تلفنی برای دستگاههایی اعمال میشود که هم از تشخیص تلفنی و هم از تشخیص موقعیت مکانی پشتیبانی میکنند و کاربر گزینه «استفاده از موقعیت مکانی برای تنظیم منطقه زمانی» را در تنظیمات منطقه زمانی فعال کرده است. این حالت با راهاندازی مجدد دستگاه و غیرفعال شدن حالت هواپیما، بهطور خودکار فعال میشود.
در اندروید ۱۴ و بالاتر، حالت بازگشت به حالت تلفنی میتواند از طریق APIهای وضعیت LTZP فعال شود، یعنی اگر یک LTZP گزارش دهد که نامشخص است و توانایی آن در تشخیص مکان یا منطقه زمانی توسط محیطش کاهش یافته است، حالت بازگشت به حالت تلفنی فعال میشود.
وقتی در حالت پشتیبان تلفنی هستید، سرویس time_zone_detector از پیشنهادهای تلفنی طوری استفاده میکند که انگار تشخیص موقعیت مکانی غیرفعال است تا زمانی که الگوریتم موقعیت مکانی پیشنهاد خاصی ارائه دهد. پس از دریافت پیشنهاد خاص، حالت پشتیبان تلفنی غیرفعال میشود و منحصراً از پیشنهادهای مکانی استفاده میشود.
برای جزئیات پیکربندی حالت پشتیبان تلفنی، به پیکربندی تشخیص منطقه زمانی مراجعه کنید.
تنظیمات منطقه زمانی
کاربران میتوانند تنظیمات مربوط به تشخیص خودکار منطقه زمانی را در برنامه تنظیمات AOSP فعال و پیکربندی کنند.

شکل ۲. تشخیص خودکار منطقه زمانی در تنظیمات.
جدول زیر کنترلهای کاربر برای تشخیص منطقه زمانی در برنامه تنظیمات AOSP را شرح میدهد.
*در اندروید ۱۱ و پایینتر، این تنظیم با عنوان « استفاده از منطقه زمانی ارائه شده توسط شبکه» مشخص شده است | |||
| محل تنظیمات AOSP | نام تنظیمات AOSP | محدوده | رفتار |
|---|---|---|---|
| سیستم > تاریخ و زمان | تنظیم خودکار منطقه زمانی* | همه کاربران | یک ضامن. وقتی روشن است ، دستگاه مسئول تشخیص منطقه زمانی فعلی است. وقتی خاموش است ، به کاربران کنترلهایی برای تنظیم دستی منطقه زمانی دستگاه ارائه میشود. |
| سیستم > تاریخ و زمان | استفاده از موقعیت مکانی برای تنظیم منطقه زمانی | کاربر فعلی | یک ضامن. از اندروید ۱۲ در دسترس است. این گزینه فقط زمانی نمایش داده میشود که تشخیص منطقه زمانی مکان در دستگاه پشتیبانی شود. برای تغییرات معرفیشده در اندروید ۱۴، به دستگاههایی که فقط از تشخیص منطقه زمانی مکان پشتیبانی میکنند ، مراجعه کنید. |
| مکان | استفاده از موقعیت مکانی | کاربر فعلی | یک ضامن. به طور کلی استفاده از موقعیت مکانی دستگاه را مجاز یا ممنوع میکند. این مقدار در صورتی مرتبط است که تشخیص منطقه زمانی مکان در دستگاه پشتیبانی شود. |
در زیر، با توجه به تنظیمات انتخاب شده توسط کاربر، مروری بر رفتار دستگاه برای تشخیص منطقه زمانی ارائه شده است:
- [تاریخ و زمان] تنظیم خودکار منطقه زمانی: خاموش
- کاربر باید منطقه زمانی را به صورت دستی انتخاب کند.
- [تاریخ و زمان] تنظیم خودکار منطقه زمانی: روشن
- [موقعیت مکانی] استفاده از موقعیت مکانی: خاموش
- سیگنالهای تلفنی برای تشخیص منطقه زمانی استفاده میشوند.
- [مکان] استفاده از مکان: روشن
- [تاریخ و زمان] استفاده از موقعیت مکانی برای تنظیم منطقه زمانی: روشن
- از موقعیت مکانی برای تشخیص منطقه زمانی استفاده میشود.
- [تاریخ و زمان] استفاده از موقعیت مکانی برای تنظیم منطقه زمانی: خاموش
- سیگنالهای تلفنی برای تشخیص منطقه زمانی استفاده میشوند.
- [تاریخ و زمان] استفاده از موقعیت مکانی برای تنظیم منطقه زمانی: روشن
- [موقعیت مکانی] استفاده از موقعیت مکانی: خاموش
دستگاههای چند کاربره
از آنجا که چندین مورد از تنظیمات مربوط به کاربر فعلی محدود میشوند، رفتار تشخیص منطقه زمانی یک دستگاه میتواند با تغییر کاربر فعلی در یک دستگاه چندکاربره اندروید تغییر کند.
گزینهی «استفاده از مکان برای تنظیم منطقهی زمانی » محدود به کاربر فعلی است و توسط سیاست دستگاه محدود نمیشود، به این معنی که کاربران همیشه میتوانند مقدار آن را تغییر دهند، حتی زمانی که گزینهی «تنظیم خودکار منطقهی زمانی» غیرفعال باشد یا اگر سایر کنترلهای زمان یا منطقهی زمانی توسط کنترلکنندهی سیاست دستگاه محدود شده باشند.
دستگاههایی که فقط از الگوریتم تشخیص منطقه زمانی مکان پشتیبانی میکنند
این بخش رفتار دستگاههایی را شرح میدهد که فقط از الگوریتم مکانیابی پشتیبانی میکنند.
اندروید ۱۴ و بالاتر
- گزینه استفاده از موقعیت مکانی در برنامه تنظیمات AOSP برای کاربران نمایش داده نمیشود و دستگاه طوری رفتار میکند که انگار گزینه استفاده از موقعیت مکانی فعال است.
- مقدار تنظیم
location_time_zone_detection_enabledSettingsProviderکه توسط کاربر تعیین شده است، نادیده گرفته میشود. این مقدار، ترجیح کاربر را در مورد انواع دیگر دستگاهها ثبت میکند.
اندروید ۱۲ یا اندروید ۱۳
- گزینه « استفاده از موقعیت مکانی» در برنامه تنظیمات AOSP برای کاربران قابل مشاهده است و کاربران میتوانند این گزینه را غیرفعال کنند. اگر این گزینه غیرفعال باشد، دستگاه به طور خودکار منطقه زمانی را تشخیص نمیدهد.
رفتار هنگام تغییر به و از تشخیص خودکار
وقتی کاربر تشخیص منطقه زمانی را از دستی به خودکار تغییر میدهد، ممکن است time_zone_detector از قبل از منطقه زمانی فعلی مطمئن باشد. در این صورت، با فعال کردن تشخیص خودکار، منطقه زمانی دستگاه ممکن است همزمان تغییر کند تا با نظر سرویس time_zone_detector مطابقت داشته باشد.
به طور مشابه، وقتی کاربر تغییری در تنظیمات ایجاد میکند که منجر به تغییر الگوریتم فعلی سرویس time_zone_detector میشود، ممکن است time_zone_detector از قبل پیشنهاداتی برای الگوریتم جدید دریافت کرده باشد و بنابراین ممکن است زمان دستگاه بلافاصله تغییر کند تا با نظر سرویس time_zone_detector مطابقت داشته باشد.
تشخیص منطقه زمانی تلفن
تشخیص منطقه زمانی تلفنی از سیگنالهای تلفنی برای تعیین منطقه زمانی فعلی استفاده میکند. برای اطلاعات بیشتر، به تشخیص منطقه زمانی تلفنی مراجعه کنید.
تشخیص منطقه زمانی مکانی
تشخیص منطقه زمانی موقعیت مکانی در اندروید ۱۲ یا بالاتر موجود است. این یک ویژگی تشخیص خودکار منطقه زمانی اختیاری است که به دستگاهها امکان میدهد از موقعیت مکانی خود برای تعیین منطقه زمانی فعلی استفاده کنند.
سرویس location_time_zone_manager که در اندروید ۱۲ معرفی شد، در سرور سیستم اجرا میشود و شامل کدی است که مسئول ارسال پیشنهادهای الگوریتم مکان به سرویس time_zone_detector است. برای اطلاعات بیشتر، به بخش تشخیص منطقه زمانی مکان مراجعه کنید.
ملاحظات مربوط به پذیرش ویژگی
این بخش جنبههایی از ویژگی تشخیص منطقه زمانی مکان را شرح میدهد تا به سازنده دستگاه کمک کند تا در مورد پذیرش یا عدم پذیرش این ویژگی در دستگاه خود تصمیم بگیرد.
مقایسه تشخیص تلفن و موقعیت مکانی
جدول زیر مقایسهای از مزایا و معایب استفاده از سیگنالهای موقعیت مکانی به جای سیگنالهای تلفنی برای تشخیص منطقه زمانی ارائه میدهد.
| دسته بندی | تشخیص تماس تلفنی | تشخیص موقعیت مکانی |
|---|---|---|
| درستی | بسته به کشور متفاوت است. بستگی به صحت و در دسترس بودن MCC، NITZ دارد. | بستگی به پیکربندی ویژگی یا اجزای افزونه دارد. صحت معمولاً با توجه به موارد زیر متفاوت است:
|
| قابلیت بهروزرسانی | تشخیص تماس تلفنی به فایلهای موجود در ماژول قابل بهروزرسانی دادههای منطقه زمانی ( com.android.tzdata APEX) متکی است. | بستگی به پیکربندی ویژگی یا اجزای افزونه دارد. قابلیت بهروزرسانی معمولاً به این بستگی دارد که دستگاه از دادههای نقشه منطقه زمانی سرور یا کلاینت استفاده میکند. دادههای نقشه منطقه زمانی در ماژول دادههای منطقه زمانی که برای بهروزرسانی کپی TZDB و سایر اطلاعات منطقه زمانی اندروید استفاده میشود، وجود ندارد. تولیدکنندگان دستگاه همچنین باید سازگاری نسخه بین قوانین منطقه زمانی و دادههای نقشه منطقه زمانی را در نظر بگیرند. |
| مصرف برق | بدون مصرف برق یا مصرف کم برق | بستگی به تنظیمات موقعیت مکانی کاربر، افزونههای مورد استفاده و معمولاً درخواست موقعیت مکانی سایر برنامهها دارد. |
| در دسترس بودن | فقط دستگاههای تلفن. معمولاً به یک سیمکارت فعال نیاز دارد. | تشخیص موقعیت مکانی به ارائه دهندگان موقعیت مکانی موجود بستگی دارد. |
حریم خصوصی کاربر
منطقه زمانی ترجیحی کاربر معمولاً توسط موقعیت جغرافیایی او تعیین میشود. موقعیت مکانی، دادهای حساس است. کاربران ممکن است نگران باشند که به عنوان بخشی از تشخیص منطقه زمانی، از موقعیت مکانی خود مطلع شوند. صرف نظر از تشخیص منطقه زمانی، همه برنامههای در حال اجرا در یک دستگاه میتوانند منطقه زمانی فعلی دستگاه را بدون نیاز به مجوز اندروید بخوانند و برنامهها میتوانند از این اطلاعات، ایدهای نادرست از موقعیت مکانی دستگاه استنباط کنند.
به طور خاص، تشخیص منطقه زمانی میتواند از طریق روشهای غیرفعال یا فعال انجام شود:
- غیرفعال: چیزی در محیط دستگاه، منطقه زمانی مورد استفاده در آن محیط را به دستگاه اعلام میکند.
- فعال: دستگاه باید منطقه زمانی را برای خود تعیین کند و بسته به تنظیمات حریم خصوصی کاربران و رضایت آنها، موقعیت مکانی دستگاه را برای انجام این کار دریافت میکند. سپس دستگاه میتواند موقعیت مکانی خود را با سرویسهای خارجی به اشتراک بگذارد.
تشخیص غیرفعال، مانند الگوریتم تلفنی، هیچ پیامد اضافی برای حریم خصوصی کاربران ندارد.
تشخیص فعال، مانند الگوریتم مکانیابی، شامل تعیین مکان دستگاه است که ممکن است کاربران نخواهند با آن موافقت کنند و مکان میتواند از طریق شبکه ارسال شود تا شناسه منطقه زمانی تعیین شود.
رویکرد اندروید به حریم خصوصی کاربر برای تشخیص منطقه زمانی، به کاربر این امکان را میدهد که الگوریتمهایی را که انتظار میرود فعال باشند، به صورت جداگانه غیرفعال کند. علاوه بر این، کد پلتفرم AOSP مستقیماً با خود مکان سروکار ندارد: تشخیص مکان و نگاشت مکان به شناسههای منطقه زمانی به اجزای افزونهای که توسط سازندگان دستگاه پیکربندی شدهاند، واگذار شده است.
برای جزئیات بیشتر در مورد ویژگیهای حریم خصوصی کاربر، به تشخیص منطقه زمانی مکان مراجعه کنید.
پیکربندی
تولیدکنندگان دستگاه میتوانند سرویس time_zone_detector را برای تغییر رفتار آن پیکربندی کنند. این بخش گزینههای پیکربندی برای رفتار کلی سرویس time_zone_detector را شرح میدهد. برای جزئیات پیکربندی الگوریتمهای تشخیص منطقه زمانی و تلفنی، به تشخیص منطقه زمانی تلفنی و تشخیص منطقه زمانی مکانی مراجعه کنید.
پیکربندی پایه AOSP در frameworks/base/core/res/res/values/config.xml قرار دارد.
| کلید پیکربندی | مقدار AOSP | توضیحات |
|---|---|---|
config_supportTelephonyTimeZoneFallback | true | وقتی true ، time_zone_detector از حالت telephony fallback استفاده میکند. این حالت برای اندروید ۱۳ و بالاتر در دسترس است. |
تغییر رفتار پیشفرض دستگاه
در 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 مکانیزمی است که در اندروید برای پیکربندی رفتار قابل تغییر با استفاده از مقادیری که معمولاً از یک سرور راه دور توسط کد اختصاصی (غیر AOSP) دریافت میشوند، استفاده میشود. هنگام استفاده از مقادیر device_config برای آزمایش، به خصوص در طول آزمایشهای دستی طولانی مدت، دستگاه ممکن است پرچمها را همگامسازی کند، که این امر باعث تنظیم مجدد پرچمها و پاک شدن مقادیر تعیین شده برای آزمایش میشود.
در اندروید ۱۲ یا بالاتر، برای جلوگیری موقت از همگامسازی پرچمها، از دستور زیر استفاده کنید:
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 آمده است که اطلاعات مربوط به الگوریتم فعلی و وضعیت سرویس به صورت پررنگ (bold) نمایش داده شده است:
$ 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 الگوریتم مکانی را نشان میدهد. |
اطلاعات تاریخچه پیشنهادات نشان میدهد که چه پیشنهاداتی از طریق تنظیمات (دستی) و توسط الگوریتمهای تلفن و مکان ارائه شده است.