این صفحه بهترین شیوهها برای درخواست و مدیریت مجوزهای استفاده از موقعیت مکانی در پسزمینه را توضیح میدهد.
درخواست مجوزهای مکان «همیشه مجاز»
از اندروید ۱۴ به بعد ، برنامهها برای دسترسی به موقعیت مکانی کاربر باید مجوز ACCESS_BACKGROUND_LOCATION را داشته باشند. SDK ناوبری این مجوز را در فایل مانیفست خود قرار میدهد، بنابراین نیازی نیست که صریحاً آن را درخواست کنید (اگر برای اهداف دیگر لازم نباشد)، زیرا ادغام مانیفست Gradle تضمین میکند که با مانیفست برنامه ادغام شود.
با این حال، داشتن مجوز ACCESS_BACKGROUND_LOCATION برای دسترسی به موقعیت مکانی در پسزمینه کافی نیست و توصیه میکنیم از کاربران مجوز موقعیت مکانی "Allow all the time" را درخواست کنید. این تضمین میکند که برنامه میتواند در پسزمینه اجرا شود و اعلانها را نشان دهد، که دقت موقعیت مکانی را در حین پیمایش به حداکثر میرساند.
این اعلان باید به کاربران توضیح دهد که چگونه اعطای مجوز، دقت موقعیت مکانی را بهبود میبخشد و تجربه ناوبری آنها را هنگام اجرای برنامه در پسزمینه بهبود میبخشد.

برای اطلاعات بیشتر در مورد درخواست دسترسی به موقعیت مکانی کاربران، به بخش درخواست مجوزهای موقعیت مکانی | حسگرها و موقعیت مکانی | توسعهدهندگان اندروید در مستندات توسعهدهندگان اندروید مراجعه کنید.
از پاکسازی مناسب اعلانهای ناوبری اطمینان حاصل کنید
برای اطمینان از اینکه برنامه شما پس از عدم نیاز به اعلانها، آنها را فعال نگه نمیدارد، حتماً مراحل پاکسازی زیر را انجام دهید:
- پس از فراخوانی
startGuidance()، حتماًstopGuidance()یاclearDestination()را نیز فراخوانی کنید. - پس از ثبت
ArrivalListener، حتماً آن را از حالت ثبت خارج کنید. - پس از ثبت
RoadSnappedLocationProvider، حتماً آن را از حالت ثبت خارج کنید.
انجام این مراحل تضمین میکند که اعلانها وقتی دیگر نیازی به آنها نیست، فعال نگه داشته نشوند، که میتواند منجر به تخلیه باتری و نشت احتمالی حافظه شود.
هنگام فراخوانی مجدد متدهای NavigationApi#initForegroundServiceManager، ابتدا NavigationApi#clearForegroundServiceManager را فراخوانی کنید.
اگر برنامه شما از ForegroundServiceManager استفاده میکند، قبل از فراخوانی NavigationApi#initForegroundServiceManagerProvider ، NavigationApi#clearForegroundServiceManager را فراخوانی کنید، و اگر قبلاً ForegroundServiceManager را مقداردهی اولیه کردهاید، NavigationApi#initForegroundServiceManagerMessageAndIntent را فراخوانی کنید. میتوانید این کار را برای بهروزرسانی شناسه اعلان یا محتوای اعلان پس از مقداردهی اولیه مدیر سرویس پیشزمینه انجام دهید.
درباره محدودیتهای جدید معرفیشده در اندروید ۱۴
اندروید ۱۴ (اندروید U) محدودیتهای جدیدی را در مورد دسترسی برنامهها به موقعیت مکانی کاربر در پسزمینه اعمال کرد . برای کمک به کاهش این تغییرات، SDK ناوبری در نسخه ۵.۴.۰ بهروزرسانی شد تا دسترسی به موقعیت مکانی در پسزمینه بهتر مدیریت شود. همچنین توصیه میکنیم پیادهسازی خود را بهروزرسانی کنید تا اطمینان حاصل شود که برنامه شما همچنان به دقیقترین دادههای موقعیت مکانی دسترسی دارد.
چگونه تغییرات در اندروید ۱۴ بر Navigation SDK تأثیر میگذارد
وقتی تابع startGuidance() در برنامه خود فراخوانی میکنید، سرویس پیشزمینه شروع به نمایش اعلانهای کاربر برای ناوبری گام به گام میکند. ناوبری گام به گام به منظور بهروزرسانی مسیر و نمایش راهنمای بصری و صوتی صحیح، به دسترسی به موقعیت مکانی کاربر وابسته است. از اندروید ۱۴ به بعد، دسترسی به موقعیت مکانی دقیق کاربر در پسزمینه نیاز به اجازه کاربر دارد. به طور پیشفرض، اگر برنامهای مجوز کاربر برای دسترسی به موقعیت مکانی در پسزمینه را نداشته باشد و سعی کند یک سرویس پیشزمینه را برای بهروزرسانی موقعیت مکانی راهاندازی کند، سیستم یک SecurityException ایجاد میکند که باعث خرابی برنامه میشود.
چگونه SDK ناوبری این مشکل را کاهش میدهد
از نسخه ۵.۴.۰ به بعد، Navigation SDK این SecurityException بدون تأثیر بر برنامه مدیریت میکند و به navigation اجازه میدهد تا در پسزمینه به اجرای خود ادامه دهد. علاوه بر این، Navigation SDK شامل مجوز ACCESS_BACKGROUND_LOCATION در AndroidManifest خود است. به این ترتیب، برنامه شما نیازی به اعلام مجوز ندارد، زیرا ادغام Gradle آن را مدیریت خواهد کرد. با این حال، اگر قبل از رفتن برنامه به پسزمینه، اعلانی به کاربر نمایش داده نشود، Navigation SDK برای ارائه بهروزرسانیهای موقعیت مکانی به سیستم متکی خواهد بود. این بهروزرسانیهای سیستم ممکن است مکرر یا دقیق نباشند و منجر به تجربه ناوبری نامطلوب شوند. به همین دلیل، توصیه میکنیم که کاربران را برای دسترسی به موقعیت مکانی در پسزمینه نیز ترغیب کنید.
توسعهدهندگان اپلیکیشن چه کاری میتوانند برای بهبود دقت موقعیت مکانی در ناوبری انجام دهند؟
شما میتوانید با بهروزرسانی برنامه خود و درخواست دسترسی به موقعیت مکانی در پسزمینه توسط کاربران، دقت سیگنال موقعیت مکانی مورد استفاده توسط Navigation SDK را بهبود بخشید. برای اطلاعات بیشتر، به بخش «درخواست مجوزهای موقعیت مکانی «همیشه مجاز»» مراجعه کنید.