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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

رفتار ویژگی

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

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

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

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

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

همچنین، سرویس 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ها را از خط فرمان برای آزمایش فعال و شبیه‌سازی کنند. (برای اطلاعات بیشتر، به Debug and test مراجعه کنید)

APIهای وضعیت LTZP

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

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

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

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

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

وقتی الگوریتم موقعیت مکانی در دستگاهی که اندروید ۱۲ و بالاتر دارد پشتیبانی می‌شود، اندروید سرویس 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