באמצעות ממשקי ה-API של Google Play Services, האפליקציה יכולה לבקש את המיקום הידוע האחרון של מכשיר המשתמש. ברוב המקרים, אתם רוצים לדעת את המיקום הנוכחי של המשתמש, שבדרך כלל זהה למיקום האחרון הידוע של המכשיר.
באופן ספציפי, השתמשו בספק מיקום משולב כדי לאחזר את המיקום הידוע האחרון של המכשיר. ספק המיקום המשולב הוא אחד מממשקי ה-API למיקום ב-Google Play Services. הוא מנהל את טכנולוגיית המיקום הבסיסית ומספק API שמאפשר לציין דרישות ברמה גבוהה, כמו דיוק גבוה או צריכת חשמל נמוכה. היא גם מבצעת אופטימיזציה של השימוש בסוללה של המכשיר.
בשיעור הזה נסביר איך לשלוח בקשה אחת למיקום של מכשיר באמצעות ה-method getLastLocation() בספק המיקום המשולב.
הגדרת Google Play Services
כדי לגשת לספק המיקום המשולב, פרויקט הפיתוח של האפליקציה צריך לכלול את Google Play Services. מורידים ומתקינים את הרכיב של Google Play Services דרך SDK Manager ומוסיפים את הספרייה לפרויקט. פרטים נוספים זמינים במדריך הגדרת Google Play Services.
הגדרת ההרשאות שניתנות לאפליקציה
באפליקציות שכוללות תכונות שמשתמשות בשירותי מיקום, צריך לבקש הרשאות מיקום בהתאם לתרחישי השימוש של התכונות האלה.
יצירת לקוח של שירותי מיקום
ב-method onCreate() של ה-Activity, יוצרים מופע של ספק מיקום משולב (FLP) Client, כמו שמוצג בקטע הקוד הבא.
private lateinit var fusedLocationClient: FusedLocationProviderClient override fun onCreate(savedInstanceState: Bundle?) { // ... fusedLocationClient = LocationServices.getFusedLocationProviderClient(this) }
איך מקבלים את המיקום הידוע האחרון
אחרי שיוצרים את הלקוח של שירותי המיקום, אפשר לקבל את המיקום האחרון הידוע של מכשיר המשתמש. משתמשים בשיטה getLastLocation() של ספק המיקום המשולב כדי לאחזר את מיקום המכשיר. רמת הדיוק של המיקום שמוחזר על ידי הקריאה הזו נקבעת לפי הגדרת ההרשאה שהזנתם בקובץ מניפסט של אפליקציה, כפי שמתואר במדריך בנושא בקשת הרשאות מיקום.
כדי לבקש את המיקום הידוע האחרון, מפעילים את השיטה getLastLocation().
קטע הקוד הבא ממחיש את הבקשה ואת הטיפול הבסיסי בתגובה:
fusedLocationClient.lastLocation .addOnSuccessListener { location: Location? -> // Got last known location. In some rare situations this can be null. }
ה-method getLastLocation() מחזירה Task שאפשר להשתמש בו כדי לקבל אובייקט Location עם הקואורדינטות של קו הרוחב וקו האורך של מיקום גיאוגרפי. האובייקט של המיקום יכול להיות null במצבים הבאים:
- שירותי המיקום מושבתים בהגדרות המכשיר. התוצאה יכולה להיות
nullגם אם המיקום האחרון אוחזר בעבר, כי השבתת המיקום גם מנקה את המטמון. - המכשיר אף פעם לא תיעד את המיקום שלו, למשל אם מדובר במכשיר חדש או במכשיר ששוחזר להגדרות המקוריות.
- Google Play Services במכשיר הופעלו מחדש, ואין לקוח פעיל של ספק מיקום משולב (FLP) שביקש מיקום אחרי שהשירותים הופעלו מחדש. כדי להימנע מהמצב הזה, אתם יכולים ליצור לקוח חדש ולבקש עדכוני מיקום בעצמכם. מידע נוסף זמין במאמר בקשת עדכונים לגבי מיקום.
בחירת המיקום המשוער הכי מדויק
ב-FusedLocationProviderClient יש כמה שיטות לאחזור נתוני המיקום של המכשיר. בוחרים באחת מהאפשרויות הבאות, בהתאם לתרחיש לדוגמה של האפליקציה:
getLastLocation()מקבל הערכת מיקום מהר יותר וממזער את השימוש בסוללה שניתן לייחס לאפליקציה. עם זאת, יכול להיות שנתוני המיקום לא יהיו עדכניים אם לקוחות אחרים לא השתמשו במיקום באופן פעיל לאחרונה.
getCurrentLocation()מקבל מיקום עדכני ומדויק יותר באופן עקבי יותר. עם זאת, השיטה הזו יכולה לגרום לחישוב מיקום פעיל במכשיר.זו הדרך המומלצת לקבל מיקום עדכני, כשאפשר, והיא בטוחה יותר מחלופות כמו הפעלה וניהול של עדכונים לגבי מיקום בעצמכם באמצעות
requestLocationUpdates(). אם האפליקציה קוראת ל-requestLocationUpdates(), לפעמים היא יכולה לצרוך כמויות גדולות של אנרגיה אם המיקום לא זמין, או אם הבקשה לא נעצרת בצורה נכונה אחרי קבלת מיקום חדש.
מקורות מידע נוספים
למידע נוסף על אחזור המיקום הנוכחי ב-Android, אפשר לעיין במקורות המידע הבאים:
דוגמאות
- אפליקציה לדוגמה שמדגימה שיטות מומלצות לאחזור המיקום הנוכחי.