שיטות מומלצות לשימוש במיקום ברקע

בדף הזה מוסברות שיטות מומלצות לבקשה ולניהול של הרשאות לשימוש במיקום ברקע.

שליחת בקשה להרשאות מיקום 'כן, כל הזמן'

החל מ-Android 14, לאפליקציות צריכה להיות ההרשאה ACCESS_BACKGROUND_LOCATION כדי לגשת למיקום של המשתמש. ערכת Navigation SDK כוללת את ההרשאה הזו בקובץ המניפסט שלה, כך שלא צריך לבקש אותה באופן מפורש (אם היא לא נדרשת למטרות אחרות), כי כלי המיזוג של Gradle יבטיח שהיא תמוזג עם המניפסט של האפליקציה.

עם זאת, ההרשאה ACCESS_BACKGROUND_LOCATION לא מספיקה כדי לגשת למיקום ברקע, ולכן מומלץ לבקש מהמשתמשים הרשאות מיקום מסוג 'תמיד'. כך האפליקציה יכולה לפעול ברקע ולהציג התראות, מה שמגדיל את דיוק המיקום במהלך הניווט.

בהודעה למשתמשים צריך להסביר איך מתן ההרשאה ישפר את הדיוק של נתוני המיקום ואת חוויית הניווט שלהם כשהאפליקציה פועלת ברקע.

תיבת דו-שיח לדוגמה של הרשאה

מידע נוסף על בקשת גישה למיקום מהמשתמשים זמין במאמר בקשת הרשאות מיקום | חיישנים ומיקום | מפתחי Android במסמכי התיעוד למפתחי 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 בלי להשפיע על האפליקציה, כך שהניווט יכול להמשיך לפעול ברקע. בנוסף, Navigation SDK כולל את ההרשאה ACCESS_BACKGROUND_LOCATION ב-AndroidManifest שלו. כך האפליקציה לא צריכה להצהיר על ההרשאה בעצמה, כי Gradle יטפל במיזוג. עם זאת, אם לא מוצגת למשתמש התראה לפני שהאפליקציה עוברת לרקע, ה-Navigation SDK יסתמך על המערכת כדי לספק עדכוני מיקום. יכול להיות שעדכוני המערכת האלה לא יהיו תכופים או מדויקים, ושהם יפגעו בחוויית הניווט. לכן, אנחנו ממליצים לבקש מהמשתמשים גם גישה למיקום ברקע.

מה מפתחי אפליקציות יכולים לעשות כדי לשפר את הדיוק של נתוני המיקום לניווט

כדי לשפר את הדיוק של אות המיקום שבו נעשה שימוש ב-Navigation SDK, צריך לעדכן את האפליקציה כך שתבקש מהמשתמשים גישה למיקום ברקע. מידע נוסף זמין במאמר בנושא בקשת הרשאות מיקום מסוג 'כן, כל הזמן'.