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