این صفحه نحوه عملکرد تشخیص زمان و منطقه زمانی در Android را شرح میدهد. این شامل نحوه تشخیص خودکار زمان و منطقه زمانی توسط Android، گزینههای پیکربندی برای سازندگان دستگاه، و اطلاعات آزمایش میشود.
نمای کلی زمان و مناطق زمانی
برای تعیین زمان محلی کاربر برای نمایش در مکانهایی مثل نوار وضعیت، Android دو وضعیت مرتبط اما مستقل را پیگیری میکند:
- زمان فعلی تاریخ یونیکس
- منطقه زمانی کنونی
زمان مبدأ Unix فعلی و منطقه زمانی فعلی وضعیتهای سراسری دستگاه هستند، یعنی همه کاربران دستگاه از آنها استفاده میکنند.
زمان کنونی یونیکس مقدار ثابتی نیست. این مقدار بهطور خودکار بهروز میشود تا گذر زمان را منعکس کند. علاوهبر گذر عادی زمان، زمان کنونی Unix epoch دستگاه درصورت نادرست بودن اصلاح میشود، مثلاً پساز قطع شدن برق دستگاه.
منطقه زمانی کنونی تعیین میکند که برای تبدیل زمان کنونی یونیکس به زمان محلی چه اصلاحی باید انجام شود. برای مثال، در تابستان در لسآنجلس، دستگاه ۷ ساعت از زمان کنونی عصر یونیکس کم میکند و در زمستان ۸ ساعت کم میکند.
برای پشتیبانی از این محاسبات زمان محلی، همه دستگاههای Android پایگاه دادهای از همه قوانین منطقه زمانی جهانی دارند. برای اطلاعات بیشتر درباره قوانین منطقه زمانی، به قوانین منطقه زمانی مراجعه کنید.
وقتی کاربر به مکان جدیدی سفر میکند که از منطقه زمانی متفاوتی استفاده میکند، نیازی به اصلاح زمان فعلی Unix epoch نیست اما کاربر معمولاً میخواهد زمان محلی را بهجای زمان مکان قبلیاش ببیند. تغییر دادن منطقه زمانی فعلی تضمین میکند که اختلاف زمانی صحیح برای زمان فعلی تاریخ یونیکس اعمال میشود تا زمان محلی صحیح برای مکان جدید نمایش داده شود.
AOSP به کاربران اجازه میدهد ازطریق سازوکارهای زیر بهطور مستقل کنترل کنند که زمان و منطقه زمانی بهطور خودکار برای آنها تنظیم شود یا نه.
- تشخیص خودکار زمان: تضمین میکند که دستگاه زمان یونیکس کنونی صحیح را داشته باشد.
- تشخیص خودکار منطقه زمانی: مطمئن میشود دستگاه منطقه زمانی فعلی صحیح را داشته باشد.
تشخیص خودکار زمان
این بخش نمای کلیای از سرویس time_detector ارائه میدهد که تشخیص خودکار زمان، کنترلهای کاربر، گزینههای پیکربندی، و جزئیات آزمایش را مدیریت میکند.
خدمات time_detector
سرویس time_detector که در دستگاههای دارای Android نسخه ۱۰ یا بالاتر وجود دارد، تشخیص خودکار زمان را مدیریت میکند. وقتی تشخیص خودکار زمان فعال باشد، سرویس زمان کنونی دستگاه را براساس نیاز تنظیم میکند.
سرویس time_detector همیشه در یکی از دو حالت زیر است: certain یا
uncertain. وضعیت certain یا uncertain سرویس براساس پیشنهادهای زمانی که از منابع مختلف دریافت میکند تعیین میشود.
وقتی سرویس time_detector certain است، یعنی پیشنهادی با اطلاعات زمان تاریخ یونیکس دریافت کرده است، اگر پیشنهاد زمان با زمان تاریخ یونیکس فعلی متفاوت باشد، زمان تاریخ یونیکس فعلی را لغو میکند.
وقتی time_detector uncertain است، زمان فعلی را لغو نمیکند. وضعیت uncertain معمولاً به این معنی است که سرویس time_detector پیشنهادهای زمان را دریافت نکرده است. اگر پیشنهادهای دریافتی سرویس time_detector خیلی قدیمی درنظر گرفته شوند و نتوان از آنها استفاده کرد، این سرویس نیز به uncertain تبدیل میشود. سن پیشنهادها درنظر گرفته میشود زیرا اصلاحات بااستفاده از پیشنهادهای قدیمی زمان یونیکس به ساعت زمان واقعی سپریشده در دستگاه متکی است که فرض میشود در دورههای طولانی دقیق نیست.
برای تعیین خودکار زمان کنونی عصر یونیکس، دستگاه منابع مختلفی دارد که میتواند از آنها استفاده کند. در این سند، این موارد مبدأ نامیده میشوند. سرویس time_detector براساس مبدأ، توالی پیشنهادها را متمایز درنظر میگیرد.
خدمات time_detector حالتدار است، یعنی سابقه جدیدترین پیشنهادهای ارائهشده توسط هر مبدأ را نگه میدارد. اگر مبدأ اطلاعات زمان یونیکس جدیدتری داشته باشد، پیشنهادهای جدیدی برای time_detector ارائه میشود. سرویس time_detector پیشنهادهای جدید و موجود را مجدداً ارزیابی میکند
و هنگام دریافت پیشنهادها، وضعیت دستگاه را بهروز میکند.
اگرچه زمان UTC در سطح بینالمللی مورد توافق است، دلایل مختلفی وجود دارد که چرا ایجاد زمان فعلی Unix epoch همیشه برای دستگاه مجهز به Android ساده نیست:
- زمان دوره Unix یک سیستم زمانبندی است که کمی با زمان UTC متفاوت است. تبدیل بین این دو نیاز به آگاهی از زمان وقوع ثانیههای کبیسه و نحوه مدیریت آنها توسط مبدأها دارد.
- مبدأها ممکن است فقط در زمانهای خاص یا تحت شرایط خاصی دردسترس باشند. برای مثال، اگر مبدأ به اتصال شبکه نیاز داشته باشد، ممکن است فقط وقتی دستگاه به اینترنت متصل است دردسترس باشد.
- مبدأ ممکن است نادرست یا غیردقیق باشد یا خطا داشته باشد. برای مثال، اگر برج تلفن همراه زمان UTC را بهدرستی ردیابی نکند، مبدأ تلفن همراه ممکن است پیشنهادهای زمانی نادرستی ارائه دهد.
- ممکن است هنگام دریافت زمان یونیکس، اشتباهاتی رخ دهد. برای مثال، تأخیر شبکه، میانگیری، یا زمانبندی پردازش ممکن است باعث شود زمان مبدأ یونیکس نادرست باشد.
- ساعت مرجعی که برای اصلاح پیشنهاد زمان سپریشده از زمان دریافت پیشنهاد استفاده میشود ممکن است دقیق نباشد.
دو منبع اصلی تشخیص زمان وجود دارد که بهطور پیشفرض برای استفاده در AOSP پیکربندی شدهاند:
- شبکه: از سرورهای زمان «پروتکل زمان شبکه» (NTP) استفاده میکند.
- تلفن: از سیگنالهای تلفن «منطقه زمانی و هویت شبکه» (NITZ) استفاده میکند.
هر دو مبدأ تلفنی و شبکهای به اتصال به شبکههای خارجی نیاز دارند، که همیشه دردسترس نیستند.
از Android 12، Android از مبدأهای زیر نیز پشتیبانی میکند که بهطور پیشفرض برای استفاده پیکربندی نشدهاند:
- GNSS: از ارائهدهنده مکان GPS برای دریافت زمان از منبع GNSS استفاده میکند.
- خارجی: مبدأ عمومی که به سازندگان دستگاه اجازه میدهد منبع خودشان را برای زمان مبدأ یونیکس ادغام کنند.
تنظیمات زمان
کاربران میتوانند تشخیص خودکار زمان را در سیستم > تاریخ و زمان در برنامه «تنظیمات AOSP» فعال کنند.
شکل ۱. تشخیص خودکار زمان در «تنظیمات».
جدول زیر کنترلهای کاربر برای تشخیص زمان در برنامه «تنظیمات» AOSP را شرح میدهد.
|
*در Android نسخه ۱۱ و پایینتر، این تنظیم با برچسب استفاده از زمان ارائهشده توسط شبکه مشخص شده است |
|||
| مکان «تنظیمات 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>
در Android 12، پیشنهادهای شبکه و تلفن بهعنوان مبدأهایی پیکربندی میشوند که بهطور پیشفرض استفاده شوند. پیشنهادهای زمان شبکه نسبت به پیشنهادهای زمان تلفن اولویت دارند. سازندگان دستگاه میتوانند ترتیب مبدأها را تغییر دهند تا به رفتار Android 11 یا نسخههای پایینتر برگردند که در آن به تلفن اولویت بالاتری داده میشود.
بهطور پیشفرض، اگر پیشنهاد معتبر با بالاترین اولویت با زمان ساعت سیستم فعلی دستگاه تا چند ثانیه مطابقت داشته باشد، زمان دستگاه تغییر نخواهد کرد. این کار برای جلوگیری از ایجاد کار برای برنامههای نصبشدهای است که به هدف ACTION_TIME_CHANGED گوش میدهند.
مقادیر مبدأ مجاز عبارتاند از:
محدودههای زمانی مجاز
Android 14 حد بالای زمانی را برای پیشنهادهای زمانی دریافتی توسط سرویس
time_detector معرفی میکند. اگر دستگاه از فرایندهای ۳۲ بیتی پشتیبانی کند، چارچوب
حد بالایی برای زمان تعیین میکند تا از استفاده دستگاه از پیشنهاد زمانی که
میتواند باعث بروز مشکل Y2038 شود جلوگیری کند.
Android 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 میتواند در یکی از دو حالت زیر باشد: 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"]- الگوریتم مطمئن است که منطقه اروپا/لندن است.
type =
certain,zoneIds = []`- الگوریتم مطمئن است، اما هیچ شناسه منطقهای با مکان کنونی مرتبط نیست.
نوع =
certain،zoneIds = ["America/Denver", "America/Phoenix"]- الگوریتم مطمئن است که پاسخ یکی از دو منطقه است، اما نمیتواند بین 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» فعال و پیکربندی کنند.
شکل ۲. تشخیص خودکار منطقه زمانی در «تنظیمات».
جدول زیر کنترلهای کاربر برای تشخیص منطقه زمانی در برنامه «تنظیمات AOSP» را شرح میدهد.
|
*در Android نسخه ۱۱ و پایینتر، این تنظیم استفاده از منطقه زمانی ارائهشده توسط شبکه نام دارد |
|||
| مکان تنظیمات AOSP | نام تنظیمات AOSP | حوزه | رفتار |
|---|---|---|---|
| سیستم > تاریخ و ساعت | تنظیم خودکار منطقه زمانی* | همه کاربران | کلید تغییر وضعیت. وقتی روشن باشد، دستگاه مسئول تشخیص منطقه زمانی فعلی است. وقتی خاموش باشد، کنترلهایی دراختیار کاربران قرار میگیرد تا منطقه زمانی دستگاه را بهصورت دستی تنظیم کنند. |
| سیستم > تاریخ و ساعت | برای تنظیم منطقه زمانی، از مکان استفاده کنید | کاربر کنونی | کلید تغییر وضعیت. از Android 12 دردسترس است. این کلید فقط زمانی نمایش داده میشود که دستگاه از تشخیص منطقه زمانی مکان پشتیبانی کند. برای تغییرات معرفیشده در Android 14، به دستگاههایی که فقط از تشخیص منطقه زمانی مکان پشتیبانی میکنند مراجعه کنید. |
| مکان | استفاده از مکان | کاربر کنونی | کلید تغییر وضعیت. استفاده از مکان دستگاه را بهطور کلی مجاز یا غیرمجاز میکند. اگر تشخیص منطقه زمانی مکان در دستگاه پشتیبانی شود، مقدار مربوط است. |
در ادامه، نمای کلی رفتار دستگاه برای تشخیص منطقه زمانی براساس تنظیمات انتخابشده توسط کاربر ارائه شده است:
- [تاریخ و زمان] تنظیم خودکار منطقه زمانی: خاموش
- کاربر باید منطقه زمانی را بهصورت دستی انتخاب کند.
- [تاریخ و زمان] تنظیم خودکار منطقه زمانی: روشن
- [مکان] استفاده از مکان: خاموش
- از سیگنالهای تلفنی برای تشخیص منطقه زمانی استفاده میشود.
- [مکان] استفاده از مکان: روشن
- [تاریخ و زمان] استفاده از مکان برای تنظیم منطقه زمانی: روشن
- از مکان برای تشخیص منطقه زمانی استفاده میشود.
- [تاریخ و زمان] استفاده از مکان برای تنظیم منطقه زمانی: خاموش
- از سیگنالهای تلفنی برای تشخیص منطقه زمانی استفاده میشود.
- [تاریخ و زمان] استفاده از مکان برای تنظیم منطقه زمانی: روشن
- [مکان] استفاده از مکان: خاموش
چندین دستگاه کاربر
ازآنجاییکه چندین تنظیم مربوط به کاربر فعلی است، عملکرد تشخیص منطقه زمانی دستگاه میتواند با تغییر کاربر فعلی در دستگاه چندکاربره Android تغییر کند.
کلید استفاده از مکان برای تنظیم منطقه زمانی به کاربر فعلی محدود میشود و خطمشی دستگاه آن را محدود نمیکند، یعنی کاربران همیشه میتوانند مقدار آن را تغییر دهند، حتی اگر کلید تنظیم خودکار منطقه زمانی خاموش باشد یا اگر سایر کنترلهای زمان یا منطقه زمانی توسط «کنترلکننده خطمشی دستگاه» محدود شده باشد.
دستگاههایی که فقط از الگوریتم تشخیص منطقه زمانی مکان پشتیبانی میکنند
این بخش عملکرد دستگاههایی را که فقط از الگوریتم مکان پشتیبانی میکنند شرح میدهد.
Android 14 و بالاتر
- گزینه استفاده از مکان در برنامه «تنظیمات AOSP» به کاربران نشان داده نمیشود و دستگاه طوری رفتار میکند که انگار گزینه استفاده از مکان فعال است.
- مقدار تنظیم
SettingsProviderبا محدوده کاربرlocation_time_zone_detection_enabledنادیده گرفته میشود. این مقدار اولویت کاربر را در انواع دیگر دستگاهها ثبت میکند.
Android 12 یا Android 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 و سایر اطلاعات منطقه زمانی وجود ندارد. سازندگان دستگاه باید سازگاری نسخه بین قوانین منطقه زمانی و دادههای نقشه منطقه زمانی را نیز درنظر بگیرند. |
| مصرف انرژی | مصرف انرژی کم یا بدون مصرف انرژی | به تنظیمات مکان کاربر، افزایههای مورداستفاده، و معمولاً برنامههای دیگری که مکان را درخواست میکنند بستگی دارد. |
| دردسترس بودن | فقط دستگاههای تلفنی. معمولاً به سیمکارت فعال نیاز دارد. | تشخیص مکان به ارائهدهندگان مکان دردسترس بستگی دارد. |
حریم خصوصی کاربر
منطقه زمانی ترجیحی کاربر معمولاً براساس مکان جغرافیایی او تعیین میشود. مکان جزو دادههای حساس است. کاربران ممکن است نگران باشند که مکان آنها بهعنوان بخشی از تشخیص منطقه زمانی همرسانی شود. همه برنامههایی که در دستگاه اجرا میشوند، بدون نیاز به اجازه 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، از یکی از گزینههای زیر استفاده کنید:
- ازطریق واسط کاربر «تنظیمات» بهصورت بصری بررسی کنید. برای اطلاعات بیشتر، به تنظیمات منطقه زمانی مراجعه کنید.
استفاده از خط فرمان ازطریق 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 |
الگوریتم تعویض: false نشاندهنده الگوریتم تلفنی،
و true نشاندهنده الگوریتم مکان است. |
اطلاعات سابقه پیشنهاد نشان میدهد که چه پیشنهادهایی ازطریق «تنظیمات» (دستی) و توسط الگوریتمهای تلفن و مکان ارائه شده است.