برای احترام به حریم خصوصی کاربران، به توسعهدهندگان برنامهها توصیه میشود که فقط مجوزهای موقعیت مکانی تقریبی را درخواست کنند. برنامههایی که به موقعیت تقریبی تقریبی نیاز دارند، معمولاً از موقعیت مکانی شبکه (FLP) استفاده میکنند زیرا سریع است و انرژی کمتری مصرف میکند.
در مقایسه با دستگاههای تلفن همراه مبتنی بر اندروید، مکانیابی شبکه در برنامههای خودرو میتواند چالشبرانگیزتر باشد. میتوانید از دو API اندروید استفاده کنید:
API یا LM مربوط به LocationManager از شما میخواهد که ارائهدهندهی موقعیت مکانی مورد نظر خود را به صراحت مشخص کنید.
API سرویسهای گوگل پلی با معرفی ارائهدهندهی موقعیت مکانی ترکیبی (FLP) روشی سادهتر برای کار با موقعیت مکانی ارائه میدهد.
بسیاری از برنامههای خودرو به جای LM از FLP از API سرویسهای گوگل پلی (GPS) استفاده میکنند. FLP بر اساس معیارها و سیاستهای درخواست مکان (قدرت و دقت) مورد نیاز خودرو، ارائهدهنده مکان بهینه را انتخاب میکند.
در عوض، میتوانید به طور صریح درخواست و استفاده NETWORK_PROVIDER در LM و همچنین GPS_PROVIDER برای موقعیتهای دقیق انتخاب کنید که از مجوزهای android.permission.ACCESS_FINE_LOCATION استفاده میکند. در API 31، FUSED_PROVIDER که قبلاً فقط از طریق API GPS قابل دسترسی بود، اکنون به عنوان یک ارائه دهنده موقعیت مکانی برای LM در دسترس است. میتوانید پیادهسازی سادهتری از FLP را در FusedLocationProvider.java مشاهده کنید.
اگرچه استفاده از GPS_PROVIDER فقط با مجوزهای کلی امکانپذیر است، اما این چارچوب به طور مصنوعی دقت را کاهش میدهد تا با انتظارات مطابقت داشته باشد و برای توسعهدهندگانی که گوشیهای اندروید را هدف قرار میدهند، منطقی نیست زیرا دسترسی کلی ضعیف است و اغلب دستیابی به موقعیت کلی کندتر است.
موقعیت شبکه در خودرو
NETWORK_PROVIDER که در گوشیهای اندروید (با سرویسهای موبایل گوگل) استفاده میشود، از تعیین موقعیت مکانی صرفاً بر اساس دکلهای مخابراتی نزدیک، به استفاده از نقاط دسترسی Wi-Fi یا حتی بلوتوث (BT) تغییر کرده است. استفاده از NETWORK_PROVIDER ممکن است نیاز به اتصال داده داشته باشد.
برای اپلیکیشنهای خودرو، محدودیتهای دستگاه متفاوت است. از آنجا که GNSS معمولاً روشن است، هیچ جریمهای به دلیل افزایش مصرف برق و باتری ایجاد نمیشود. در نتیجه، زمان روشن بودن IVI به خطر نمیافتد. ما تلاش میکنیم تا دادههای رد و بدل شده با سرورهای خود را به حداقل برسانیم.
بنابراین بسیاری از برنامهها به جای استفاده مستقیم از LM، از FLP موجود در Play API استفاده میکنند، زیرا FLP به طور خودکار با استفاده از ارائهدهنده مکانی که به بهترین شکل قادر به برآورده کردن معیارها/سیاستهای درخواست مکان (یعنی قدرت و دقت) در پس زمینه است، کار هوشمندانهای انجام میدهد.
برخلاف دستگاههای تلفن همراه، به ندرت پیش میآید که وسایل نقلیه از یک مکان به مکان دیگر بپرند . موقعیت وسیله نقلیه اغلب اوقات از پشت کاپوت مشخص است.
ارائه دهنده موقعیت مکانی شبکه
اکثر خودروها APIهای تلفنی لازم برای دریافت اطلاعات مورد نیاز در مورد شناسه تلفن همراه (و قدرت سیگنال) را پیادهسازی نمیکنند. در نتیجه، و از آنجایی که ما استفاده از داده را به حداقل میرسانیم، هیچ پیادهسازی کاربردی اضافی از NLP ارائه نمیشود.
ارائه دهنده موقعیت مکانی فیوزد
FLP موبایل، علاوه بر استفاده هوشمندانه از ارائه دهندگان شبکه و GPS در صورت لزوم، اطلاعات سایر حسگرها را برای بهبود بیشتر کیفیت مکانها ترکیب میکند. از سوی دیگر، پیادهسازی فعلی FLP شرکت Automotive از فرضیات فوقالذکر بهره میبرد و همیشه از 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" />
این رویکرد حداکثر سازگاری با دستگاهها در بازارهای عمودی و بنابراین، حداکثر دسترسی به برنامه را بدون هیچ تفاوتی در کد برای دریافت موقعیتها در صورت نیاز تضمین میکند.