בדף הזה מוסברות שיטות מומלצות לבקשה ולניהול של הרשאות לשימוש במיקום ברקע.
שליחת בקשה להרשאות מיקום 'כן, כל הזמן'
החל מ-Android 14, לאפליקציות צריכה להיות ההרשאה
ACCESS_BACKGROUND_LOCATION כדי לגשת למיקום של המשתמש.
ההרשאה הזו כלולה ב-Navigation SDK בקובץ המניפסט שלו, כך שלא צריך לבקש אותה במפורש (אם היא לא נדרשת למטרות אחרות), כי כלי המיזוג של Gradle יבטיח שהיא תמוזג עם המניפסט של האפליקציה.
עם זאת, ההרשאה ACCESS_BACKGROUND_LOCATION לא מספיקה כדי לגשת למיקום ברקע, ולכן מומלץ לבקש מהמשתמשים הרשאות מיקום מסוג 'תמיד'. כך האפליקציה יכולה לפעול ברקע ולהציג התראות, מה שמגדיל את דיוק המיקום במהלך הניווט.
בהודעה למשתמשים צריך להסביר איך מתן ההרשאה ישפר את הדיוק של נתוני המיקום ואת חוויית הניווט שלהם כשהאפליקציה פועלת ברקע.
מידע נוסף על בקשת גישה למיקום מהמשתמשים זמין במאמר בקשת הרשאות מיקום | חיישנים ומיקום | Android Developers במסמכי התיעוד למפתחי Android.
איך מוודאים שההתראות על הניווט נמחקות כמו שצריך
כדי לוודא שהאפליקציה לא תמשיך להציג התראות אחרי שהן כבר לא נחוצות, חשוב לבצע את שלבי הניקוי הבאים:
- אחרי שמפעילים את
startGuidance(), חשוב להפעיל אתstopGuidance()או אתclearDestination(). - אחרי שרושמים את
ArrivalListener, חשוב לבטל את הרישום שלו. - אחרי שרושמים את
RoadSnappedLocationProvider, חשוב לבטל את הרישום שלו.
השלמת השלבים האלה מבטיחה שההתראות לא ימשיכו לפעול כשאין בהן יותר צורך, דבר שעלול לגרום לניקוז הסוללה ולדליפות זיכרון.
כשמפעילים מחדש את השיטות NavigationApi#initForegroundServiceManager, צריך להפעיל קודם את השיטה NavigationApi#clearForegroundServiceManager
אם האפליקציה משתמשת ב-ForegroundServiceManager, צריך להפעיל את NavigationApi#clearForegroundServiceManager לפני שמפעילים את NavigationApi#initForegroundServiceManagerProvider. אם כבר הפעלתם את ForegroundServiceManager, צריך להפעיל את NavigationApi#initForegroundServiceManagerMessageAndIntent. אפשר לעשות את זה כדי לעדכן את מזהה ההתראה או את תוכן ההתראה אחרי שמפעילים את מנהל השירותים שפועלים בחזית.
מידע על ההגבלות החדשות שהוצגו ב-Android 14
ב-Android 14 (Android U) הוצגו הגבלות חדשות על אפליקציות שגורמות לגישה למיקום של המשתמש ברקע. כדי לעזור לכם להתמודד עם השינויים האלה, גרסה 5.4.0 של Navigation SDK עודכנה כדי לנהל טוב יותר את הגישה למיקום ברקע. מומלץ גם לעדכן את ההטמעה כדי להבטיח שהאפליקציה תמשיך לקבל גישה לנתוני המיקום המדויקים ביותר.
איך שינויים ב-Android 14 משפיעים על Navigation SDK
כשמפעילים את startGuidance() באפליקציה, השירות שפועל בחזית מתחיל להציג למשתמש התראות על ניווט מפורט. הניווט באמצעות מסלול מפורט תלוי בגישה למיקום של המשתמש כדי לעדכן את המסלול ולהציג את ההנחיות החזותיות והקוליות הנכונות. החל מ-Android 14, כדי לגשת למיקום המדויק של המשתמש ברקע נדרשת הרשאה מהמשתמש. כברירת מחדל, אם לאפליקציה אין הרשאה מהמשתמש לגישה למיקום ברקע והיא מנסה להפעיל שירות בחזית כדי לקבל עדכוני מיקום, המערכת מציגה SecurityException, מה שגורם לקריסת האפליקציה.
איך Navigation SDK מפחית את הסיכון לבעיה הזו
החל מגרסה 5.4.0, Navigation SDK מטפל בבעיה הזו SecurityException
בלי להשפיע על האפליקציה, כך שהניווט יכול להמשיך לפעול ברקע. בנוסף, ההרשאה ACCESS_BACKGROUND_LOCATION כלולה ב-AndroidManifest של Navigation SDK. כך האפליקציה לא צריכה להצהיר על ההרשאה בעצמה, כי Gradle יטפל במיזוג. עם זאת, אם לא מוצגת למשתמש התראה לפני שהאפליקציה עוברת לרקע, ה-Navigation SDK יסתמך על המערכת כדי לספק עדכוני מיקום. יכול להיות שעדכוני המערכת האלה לא יהיו תכופים או מדויקים, ושהם יפגעו בחוויית הניווט. לכן, אנחנו ממליצים גם לבקש מהמשתמשים גישה למיקום ברקע.
מה מפתחי אפליקציות יכולים לעשות כדי לשפר את הדיוק של נתוני המיקום לניווט
כדי לשפר את רמת הדיוק של אות המיקום שמשמש את Navigation SDK, צריך לעדכן את האפליקציה כך שתבקש מהמשתמשים גישה למיקום ברקע. מידע נוסף זמין במאמר בנושא בקשת הרשאות מיקום מסוג 'כן, כל הזמן'.