مکان غیردقیق در «سیستم عامل Android Automotive»

برای احترام به حریم خصوصی کاربر، توسعه‌دهندگان نرم‌افزار تشویق می‌شوند که فقط برای مکان غیردقیق اجازه درخواست کنند. برنامه‌هایی که به موقعیت تقریبی نیاز دارند معمولاً از مکان شبکه تلفیقی (FLP) استفاده می‌کنند زیرا سریع است و مصرف باتری کمتری دارد. در مقایسه با دستگاه‌های همراه Android، مکان شبکه در برنامه‌های خودرویی می‌تواند چالش‌برانگیزتر باشد. می‌توانید از دو میانای برنامه‌سازی کاربردی Android استفاده کنید:

  • LocationManager API از شما می‌خواهد که از requestLocationUpdates برای شناسایی صریح ارائه‌دهنده مکان ترجیحی استفاده کنید.

  • میانای برنامه‌سازی کاربردی «خدمات Google Play» روشی ساده‌تر برای کار با مکان در FusedLocationProviderClient ارائه می‌دهد.

بسیاری از برنامه‌های خودرویی به‌جای LocationManager از FLP از Google Play services API استفاده می‌کنند. FLP ارائه‌دهنده مکان بهینه را براساس معیارها و خط‌مشی‌های درخواست مکان (قدرت و دقت) موردنیاز خودرو انتخاب می‌کند.

درعوض می‌توانید به‌طور صریح NETWORK_PROVIDER و همچنین GPS_PROVIDER را برای مکان‌های دقیق درخواست و استفاده کنید که از اجازه‌های android.permission.ACCESS_FINE_LOCATION استفاده می‌کند. در Android نسخه ۱۲ (سطح میانای برنامه‌سازی کاربردی ۳۱) و بالاتر، FUSED_PROVIDER، که قبلاً فقط ازطریق میانای برنامه‌سازی کاربردی خدمات Google Play دردسترس بود، به‌عنوان ارائه‌دهنده مکان برای LocationManager دردسترس است. می‌توانید پیاده‌سازی «ارائه‌دهنده تلفیقی مکان» را در FusedLocationProvider.java ببینید.

اگرچه می‌توان از GPS_PROVIDER فقط با حقوق اجازه تقریبی استفاده کرد — چارچوب به‌طور مصنوعی دقت را کاهش می‌دهد تا با انتظارات مطابقت داشته باشد — این کار برای توسعه‌دهندگانی که تلفن‌های Android را هدف قرار می‌دهند منطقی نیست زیرا دردسترس بودن کلی ضعیف است و اغلب دریافت موقعیت تقریبی کندتر است.

مکان شبکه در خودرو

NETWORK_PROVIDER که در تلفن‌های Android (با «خدمات تلفن همراه Google») استفاده می‌شود مکان را براساس دکل‌های سلولی، نقاط دسترسی Wi-Fi، و فانوس‌های بلوتوث (BT) اطراف تعیین می‌کند. درنتیجه، NETWORK_PROVIDER ممکن است به اتصال داده نیاز داشته باشد.

برای برنامه‌های خودرو، محدودیت‌های دستگاه متفاوت است. چون سامانه ماهواره‌ای ناوبری جهانی (GNSS) معمولاً روشن است، به‌دلیل افزایش مصرف برق و باتری جریمه‌ای اعمال نمی‌شود. درنتیجه، زمان فعال بودن دستگاه IVI به‌خطر نمی‌افتد. تلاش می‌کنیم تبادل داده با سرورهایمان را به حداقل برسانیم.

بسیاری از برنامه‌ها به‌جای استفاده مستقیم از LocationManager، از «ارائه‌دهنده تلفیقی مکان» از Play API استفاده می‌کنند زیرا «ارائه‌دهنده تلفیقی مکان» به‌طور خودکار بهترین ارائه‌دهنده مکان را برای برآورده کردن معیارها یا خط‌مشی‌های درخواست شما، مانند مصرف باتری و دقت، انتخاب می‌کند.

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

ارائه‌دهنده مکان شبکه (NLP)

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

ارائه‌دهنده تلفیقی مکان

‫FLP تلفن همراه علاوه‌بر استفاده از ارائه‌دهندگان شبکه و GPS، اطلاعات سایر حسگرها را نیز برای بهبود کیفیت مکان تلفیق می‌کند. Conversely, the Automotive FLP uses GPS_PROVIDER as its underlying source. این سرویس موقعیت‌های «سامانه ماهواره‌ای ناوبری جهانی» را تنظیم می‌کند و وقتی کارخواه مکان غیردقیق درخواست می‌کند، خطای عمدی اضافه می‌کند تا دقت را کاهش دهد.

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

طراحی برنامه‌ها برای هدف قرار دادن کاربردهای تلفن همراه و خودرو

برای برنامه‌هایی که دستگاه‌های خودرویی و تلفن همراه را هدف قرار می‌دهند و به کیفیت بالاتری از دقت نیاز ندارند، android.permission.ACCESS_COARSE_LOCATION را فقط درخواست کنید و درصورت دردسترس بودن، به استفاده از FLP برگردید. یا از GPS_PROVIDER مستقیماً با همان اجازه‌ها استفاده کنید. چارچوب دقت موقعیت GNSS زیربنایی را کاهش می‌دهد تا با انتظارات API مطابقت داشته باشد. برای کسب اطلاعات بیشتر، دقت را در درخواست اجازه‌های مکان ببینید.

به‌علاوه، این برنامه‌ها باید به‌طور صریح ویژگی android.hardware.location.network را به‌عنوان اختیاری در مانیفست خود اعلام کنند. برای مثال:

<uses-feature android:name="android.hardware.location.network" android:required="false" />

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