כדי לצמצם את צריכת החשמל, בגרסה 8.0 של Android (רמת API 26) מוגבלת התדירות שבה אפליקציה יכולה לאחזר את המיקום הנוכחי של המשתמש בזמן שהאפליקציה פועלת ברקע. בתנאים האלה, האפליקציות יכולות לקבל עדכוני מיקום רק כמה פעמים בכל שעה.
הערה: המגבלות האלה חלות על כל האפליקציות שמשמשות במכשירים שפועלת בהם גרסת Android 8.0 (רמת API 26) ואילך, ללא קשר לגרסה של ה-SDK לטירגוט של האפליקציה.
חשוב לזכור את אופן אחזור המיקום הזה במיוחד אם האפליקציה שלכם מסתמכת על התראות בזמן אמת או על זיהוי תנועה בזמן שהיא פועלת ברקע.
התנהגות האפליקציה שפועלת בחזית נשמרת
אם אפליקציה נמצאת בחזית במכשיר עם Android 8.0 (רמת API 26), התנהגות עדכון המיקום זהה לזו של Android 7.1.1 (רמת API 25) וגרסאות ישנות יותר.
אזהרה: אם האפליקציה שלכם מאחזרת עדכוני מיקום בזמן אמת לאורך זמן רב, חיי הסוללה של המכשיר קצרים יותר באופן משמעותי.
שינוי התנהגות האפליקציה בנושא מיקום
כדאי לבדוק אם תרחישי השימוש של האפליקציה לצורך הפעלה ברקע לא יכולים לפעול בכלל אם האפליקציה מקבלת עדכוני מיקום בתדירות נמוכה. במקרה כזה, תוכלו לאחזר עדכוני מיקום בתדירות גבוהה יותר באחת מהדרכים הבאות:
- מעבירים את האפליקציה לחזית.
-
כדי להפעיל שירות שפועל בחזית באפליקציה, צריך לבצע קריאה ל-
startForegroundService()
. כששירות כזה בחזית פעיל, הוא מופיע כהתראה מתמשכת באזור ההתראות.זהירות: אם האפליקציה מפעילה שירות בחזית בזמן שהיא פועלת ברקע במכשיר עם Android 11 (רמת API 30) ואילך, האפליקציה לא יכולה לגשת למידע על המיקום אלא אם המשתמש העניק לאפליקציה את ההרשאה
ACCESS_BACKGROUND_LOCATION
. למידע נוסף, אפשר לעיין בהנחיות לגבי ההגבלות במהלך השימוש שמשויכות לשירותים שפועלים בחזית. -
להשתמש ברכיבים של Geofencing API, כמו
GeofencingClient
, שעברו אופטימיזציה לצמצום צריכת החשמל. - להשתמש בבורר מיקום פסיבי, שעשוי לקבל עדכוני מיקום מהר יותר אם יש אפליקציות בחזית שמבקשות עדכוני מיקום בקצב מהיר יותר.
הערה: אם לאפליקציה שלכם דרושה גישה להיסטוריית המיקומים שמכילה עדכונים תדירים, השתמשו בגרסה האוספת של רכיבי Fused Location Provider API, כמו הממשק FusedLocationProviderApi
. כשהאפליקציה פועלת ברקע, ה-API הזה מקבל את המיקום של המשתמש בתדירות גבוהה יותר מאשר ה-API ללא אשכולות. עם זאת, חשוב לזכור שהאפליקציה עדיין מקבלת עדכונים בקבוצות רק כמה פעמים בכל שעה.
ממשקי ה-API שהושפעו
השינויים בהתנהגות אחזור המיקום באפליקציות ברקע משפיעים על ממשקי ה-API הבאים:
- ספק מיקום משולב (FLP)
-
-
אם האפליקציה פועלת ברקע, שירות מערכת המיקום מחשב מיקום חדש לאפליקציה רק כמה פעמים בכל שעה. המצב הזה נכון גם אם האפליקציה מבקשת עדכוני מיקום בתדירות גבוהה יותר.
עם זאת, אם משתמשים ב גרסה של FLP עם קבוצות נתונים, יש לכם גישה להיסטוריית מיקומים בתדירות גבוהה יותר לאחר שהאפליקציה מקבלת עדכון קבוצתי, שמתרחש גם הוא רק כמה פעמים בכל שעה.
- אם האפליקציה פועלת בחזית, אין שינוי בשיעורי הדגימה של המיקום בהשוואה ל-Android 7.1.1 (רמת API 25).
-
- גבולות וירטואליים
-
- אפליקציות ברקע יכולות לקבל אירועי מעבר של גיאופיינס בתדירות גבוהה יותר מאשר עדכונים מספק המיקום המשולב.
- תגובה ממוצעת לאירוע של הגדרת גבולות גיאוגרפיים מתקבלת כל כמה דקות.
- מדידות GNSS והודעות ניווט של GNSS
-
- כשהאפליקציה נמצאת ברקע, פונקציות ה-callbacks שרשמות לקבלת פלט מ-
GnssMeasurement
ומ-GnssNavigationMessage
מפסיקות לפעול.
- כשהאפליקציה נמצאת ברקע, פונקציות ה-callbacks שרשמות לקבלת פלט מ-
- מנהל המיקומים
-
-
עדכוני המיקום מועברים לאפליקציות ברקע רק כמה פעמים בכל שעה.
הערה: אם האפליקציה פועלת במכשיר שבו מותקנים שירותי Google Play, מומלץ מאוד להשתמש ב-Fused Location Provider (FLP) במקום ב-Location Services.
-
- מנהל ה-Wi-Fi
-
ה-method
startScan()
מבצע סריקת מלא של אפליקציות ברקע רק כמה פעמים בכל שעה. אם אפליקציה ברקע קוראת שוב לשיטה זמן קצר לאחר מכן, הכיתהWifiManager
מספקת תוצאות שנשמרו במטמון מהסריקה הקודמת.