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

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

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

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

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

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

  • اجرای LTZP مرجع.

  • ابزار میزبان برای تولید مجموعه داده های مرجع از داده های OpenStreetMap که می تواند با پیاده سازی مرجع استفاده شود.

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

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

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

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

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

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

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

رفتار ویژگی

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

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

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

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

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

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

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

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

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

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

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

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

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

برای پشتیبانی از ویژگی منطقه زمانی مکان، دستگاه‌ها باید با 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 ها را از خط فرمان برای آزمایش فعال و شبیه سازی کنند. (برای اطلاعات بیشتر، اشکال زدایی و آزمایش را ببینید.)

APIهای وضعیت LTZP

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

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

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

پیکربندی و استقرار ارائه دهنده منطقه زمانی مکان

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

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

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

مرجع AOSP LTZP

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

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

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

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

با سرویس 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 همچنین می تواند پشتیبانی از اشکال زدایی یا آزمایش خود را ارائه دهد. به عنوان مثال، می‌توانید از دستور زیر برای رفع اشکال AOSP مرجع LTZP زمانی که در فرآیند سرور سیستم ثبت شده است استفاده کنید.

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