برای احترام به حریم خصوصی کاربر، به توسعهدهندگان برنامه توصیه میشود که فقط مجوزهای موقعیت مکانی تقریبی را درخواست کنند. برنامههایی که به موقعیت تقریبی تقریبی نیاز دارند، معمولاً از موقعیت مکانی شبکه ترکیبی (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 شرکت 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" />
این رویکرد به دستیابی به سازگاری بیشتر با دستگاهها در انواع فرم فاکتورها و در نتیجه، حداکثر دسترسی به برنامه بدون هیچ گونه تفاوت کد برای دریافت موقعیتها در صورت نیاز کمک میکند.