تشخیص منطقه زمانی بااستفاده از مکان

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

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

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

  • منطق تشخیص منطقه زمانی در سرور سیستم
  • گزینه‌ای دردسترس کاربر در «تنظیمات» که در Android 12 معرفی شده است تا به کاربران امکان دهد بین سازوکارهای تشخیص منطقه زمانی تلفن و مکان انتخاب کنند

  • سیستم افزایه‌ای برای مؤلفه‌هایی که تشخیص مکان و منطقه‌بندی زمانی را انجام می‌دهند. نام این افزایه ارائه‌دهنده منطقه زمانی مکان (LTZP) است و در هر دستگاه حداکثر دو افزایه از این نوع می‌تواند وجود داشته باشد. این پلاتفرم «میاناهای برنامه‌سازی کاربردی» سیستمی ارائه می‌دهد که باید برای پیاده‌سازی LTZP استفاده شود.

  • پیاده‌سازی مرجع LTZP.

  • ابزار میزبان برای تولید مجموعه داده مرجع از داده‌های Open Street Map (OSM) که می‌تواند با پیاده‌سازی مرجع استفاده شود.

حریم خصوصی کاربر

ویژگی‌های حریم خصوصی کاربر زیر در تشخیص منطقه زمانی مکان گنجانده شده است:

  • وقتی کلیدی برای انتخاب الگوریتم مکان وجود دارد، کاربران می‌توانند الگوریتم مکان را هرزمان بخواهند خاموش کنند.

  • پیشنهادهای منطقه زمانی برگرفته از مکان بین کاربران در دستگاه هم‌رسانی نمی‌شود.

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

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

    • سرویس‌های تشخیص‌دهنده منطقه زمانی شناسه‌های منطقه زمانی را از LTZP دریافت می‌کنند، نه مکان دستگاه. این حداقل میانای برنامه‌سازی کاربردی موردنیاز برای پشتیبانی از تشخیص منطقه زمانی مکان است.
    • ادغام‌کنندگان سیستم عملکرد هریک از «مناطق با زمان‌بندی چراغ راهنمایی» را کنترل می‌کنند. پیاده‌سازی‌های LTZP می‌توانند از داده‌های نقشه منطقه زمانی که کاملاً در دستگاه مجهز به Android نگهداری می‌شود، از سرورها، یا از رویکرد ترکیبی استفاده کنند.

عملکرد ویژگی

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

سرویس location_time_zone_manager مسئول تولید پیشنهادها برای الگوریتم مکان time_zone_detector است. خدمات location_time_zone_manager در فرایند سرور سیستم اجرا می‌شود.

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

وقتی تشخیص منطقه زمانی مکان لازم نباشد، LTZP شروع نمی‌شود. این یعنی سیستم تشخیص منطقه زمانی مکان از «ارائه‌دهندگان منطقه زمانی مکان» نمی‌خواهد مکان دستگاه را ردیابی کنند، مگراینکه صریحاً از آن‌ها خواسته شود. برخی‌از دلایل این رفتار عبارت‌اند از:

  • برخلاف سیگنال‌های تلفنی که به‌صورت غیرفعال به‌عنوان بخشی از عملیات عادی تلفنی دریافت می‌شوند، مکان را می‌توان به‌صورت فعال از ارائه‌دهندگان مکان Android درخواست کرد و این کار می‌تواند باعث مصرف بیشتر باتری شود.
  • تنظیمات مکان در محدوده کاربر است و Android باید به تنظیمات کاربر فعلی احترام بگذارد.
  • دسترسی به مکان دستگاه حساسیت‌های حریم خصوصی دارد.

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

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

پیاده‌سازی تشخیص منطقه زمانی مکان AOSP حداکثر دو LTZP، یک LTZP اصلی و یک LTZP فرعی را که در اینجا تعریف شده است مجاز می‌کند:

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

همان‌طور که در «شکل ۱» نشان داده شده است، سرویس time_zone_detector پیشنهادهای منطقه زمانی را از الگوریتم تلفن یا مکان دریافت می‌کند. الگوریتم مکان پیشنهادهایی از LTZP اولیه یا ثانویه دریافت می‌کند.

جریان اطلاعات تشخیص منطقه زمانی مکان

شکل ۱. جریان اطلاعات تشخیص منطقه زمانی مکان.

الزامات پیکربندی دستگاه

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

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

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

پیکربندی پایه AOSP در frameworks/base/core/res/res/values/config.xml قرار دارد:

کلید پیکربندی مقدار AOSP شرح
config_enableGeolocationTimeZoneDetection true این کنترل اصلی برای ویژگی تشخیص منطقه زمانی مکان است.

این ویژگی به‌طور پیش‌فرض در AOSP پشتیبانی می‌شود. باید حداقل یک LTZP فعال یا پیکربندی شود تا این ویژگی برای کاربران دردسترس قرار گیرد.

تنظیم مقدار روی false این ویژگی را به‌طور کامل غیرفعال می‌کند تا مقدار کمی در حافظه صرفه‌جویی شود.
config_enablePrimaryLocationTimeZoneProvider false این کار LTZP اصلی را فعال می‌کند.
config_primaryLocationTimeZoneProviderPackageName این را روی نام بسته برنامه‌ای تنظیم کنید که سرویس ارائه‌دهنده اصلی در آن یافت می‌شود.
config_enableSecondaryLocationTimeZoneProvider false این کار LTZP ثانویه را فعال می‌کند.
config_secondaryLocationTimeZoneProviderPackageName این را روی نام بسته برنامه‌ای تنظیم کنید که سرویس ارائه‌دهنده ثانویه در آن قرار دارد.

به‌طور پیش‌فرض، پیکربندی AOSP کلید config_enableGeolocationTimeZoneDetection را روی true تنظیم کرده است و از ویژگی تشخیص منطقه زمانی مکان پشتیبانی می‌کند. این ویژگی در ابتدا برای کاربران قابل‌مشاهده نیست زیرا AOSP به‌طور پیش‌فرض پیکربندی LTZP را ندارد. بااین‌حال، بااستفاده از این پیکربندی پیش‌فرض، سازندگان دستگاه می‌توانند LTZP را از خط فرمان برای آزمایش فعال و شبیه‌سازی کنند. (برای اطلاعات بیشتر، به اشکال‌زدایی و آزمایش مراجعه کنید)

میاناهای برنامه‌سازی کاربردی وضعیت LTZP

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

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

برای اطلاعات بیشتر درباره وضعیت‌هایی که LTZP می‌تواند گزارش کند، به TimeZoneProviderStatus مراجعه کنید.

پیکربندی و استقرار LTZP

هنگام پیکربندی LTZP، دستورالعمل‌های موجود در کد منبع را برای frameworks/base/core/java/android/service/timezone/TimeZoneProviderService.java بخوانید. نظرات Javadoc جزئیاتی درباره سرویس، اجازه‌های موردنیاز، و پیکربندی‌های دیگر ارائه می‌دهد.

برای پیکربندی LTZP، سازندگان دستگاه باید فرایند برنامه‌ای را برای میزبانی سرویس LTZP انتخاب کنند. داشتن فرایندی اختصاصی برای LTZP سربار زیادی دارد؛ در حالت ایده‌آل، فرایند برنامه انتخابی باید فرایندی باشد که همیشه درحال اجرا است، مثل سرور سیستم.

در دستگاه‌های دارای مؤلفه‌های سیستم پیمانه‌ای (پیمانه‌ها)، تعامل بین داده‌های جغرافیایی مورداستفاده LTZP و قوانین منطقه زمانی (tzdb) موجود در پیمانه داده‌های منطقه زمانی (com.android.tzdata) را درنظر بگیرید. به‌روزرسانی یکی بدون به‌روزرسانی دیگری احتمالاً باعث ایجاد مشکلات انحراف نسخه می‌شود. برای اطلاعات بیشتر، ملاحظات پذیرش ویژگی را ببینید.

مرجع AOSP LTZP

‫AOSP حاوی پیاده‌سازی مرجع LTZP در packages/modules/GeoTZ است. این پیاده‌سازی مرجع از «میاناهای برنامه‌سازی کاربردی AOSP» برای تعیین مکان دستگاه استفاده می‌کند و از فایل داده‌های درون‌دستگاهی برای نگاشت مکان به مجموعه‌ای از شناسه‌های منطقه زمانی استفاده می‌کند.

مجموعه داده مرجعی که از دیگر پروژه‌های متن‌باز استخراج شده است همراه با کد منبع ارائه می‌شود. برای جزئیات بیشتر، به README.md و فایل‌های مختلف «پروانه» مراجعه کنید.

اشکال‌زدایی و آزمایش

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

تعامل با سرویس location_time_zone_manager

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

برای تخلیه وضعیت فعلی location_time_zone_manager، از این استفاده کنید:

adb shell cmd location_time_zone_manager dump

برای دیدن مجموعه گسترده‌ای از گزینه‌های خط فرمان که به آزمایش کمک می‌کند، از این استفاده کنید:

adb shell cmd location_time_zone_manager help

برونداد راهنما همچنین ویژگی‌های سرویس device_config را که می‌توانند برای تأثیرگذاری بر رفتار time_zone_detector در آزمایش یا تولید استفاده شوند، توصیف می‌کند. برای اطلاعات بیشتر، پیکربندی دستگاه بااستفاده از سرویس device_config را ببینید.

پیاده‌سازی‌های LTZP می‌توانند پشتیبانی اشکال‌زدایی یا آزمایش خودشان را ارائه دهند. برای مثال، می‌توانید از فرمان زیر برای اشکال‌زدایی LTZP مرجع AOSP وقتی در فرایند سرور سیستم ثبت شده است استفاده کنید:

adb shell dumpsys activity service android/com.android.timezone.location.provider.OfflineLocationTimeZoneProviderService