این صفحه نحوه عملکرد تشخیص منطقه زمانی و زمانی را در 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. این کلید تنها زمانی نمایش داده میشود که تشخیص منطقه زمانی مکان در دستگاه پشتیبانی شود. برای تغییرات ارائه شده در Android 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 نشان دهنده الگوریتم مکان است. |
اطلاعات تاریخچه پیشنهادات نشان می دهد که چه پیشنهاداتی از طریق تنظیمات (دستی) و توسط الگوریتم های تلفن و مکان ارائه شده است.