موقعیت مکانی درشت در سیستم عامل Android Automotive

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

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

  • API سرویس‌های گوگل پلی روشی ساده‌تر برای کار با موقعیت مکانی در FusedLocationProviderClient ارائه می‌دهد.

بسیاری از برنامه‌های خودرو به جای LocationManager از FLP موجود در API سرویس‌های گوگل پلی استفاده می‌کنند. FLP بر اساس معیارها و سیاست‌های درخواست مکان (قدرت و دقت) مورد نیاز خودرو، ارائه‌دهنده مکان بهینه را انتخاب می‌کند.

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

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

موقعیت شبکه در خودرو

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

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

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

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

ارائه دهنده موقعیت مکانی شبکه (NLP)

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

ارائه دهنده موقعیت مکانی فیوزد

FLP موبایل علاوه بر استفاده از ارائه دهندگان شبکه و GPS، اطلاعات سایر حسگرها را برای افزایش کیفیت موقعیت مکانی ترکیب می‌کند. در مقابل، FLP خودرو از GPS_PROVIDER به عنوان منبع اصلی خود استفاده می‌کند. این FLP موقعیت‌های GNSS را تنظیم می‌کند و هنگامی که یک کلاینت درخواست موقعیت‌های تقریبی می‌کند، خطای عمدی را برای کاهش دقت اضافه می‌کند.

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

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

برای برنامه‌هایی که دستگاه‌های تلفن همراه و خودرو را هدف قرار می‌دهند و به کیفیت بالاتری از دقت نیاز ندارند، فقط 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" />

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