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