באמצעות ממשקי ה-API של המיקום בשירותי Google Play, האפליקציה יכולה לבקש את המיקום הידוע האחרון של המכשיר של המשתמש. ברוב המקרים, המיקום שמעניין אתכם הוא המיקום הנוכחי של המשתמש, שבדרך כלל שווה למיקום האחרון הידוע של המכשיר.
באופן ספציפי, צריך להשתמש בספק המיקום המשולב כדי לאחזר את המיקום האחרון הידוע של המכשיר. ספק המיקום המשולב הוא אחד מממשקי ה-API של המיקום ב-Google Play Services. הוא מנהל את טכנולוגיית המיקום הבסיסית ומספק API פשוט, כך שתוכלו לציין דרישות ברמה גבוהה, כמו דיוק גבוה או צריכת חשמל נמוכה. בנוסף, היא מבצעת אופטימיזציה של השימוש של המכשיר בכוח הסוללה.
הערה: כשהאפליקציה פועלת ברקע, הגישה למיקום צריכה להיות חיונית לפונקציונליות העיקרית של האפליקציה, וצריך לכלול גילוי נאות מתאים למשתמשים.
בשיעור הזה נסביר איך לשלוח בקשה אחת למיקום של מכשיר באמצעות השיטה getLastLocation()
בספק המיקום המשולב.
הגדרה של Google Play Services
כדי לגשת לספק המיקום המשולב, פרויקט הפיתוח של האפליקציה צריך לכלול את Google Play Services. מורידים ומתקינים את הרכיב Google Play Services דרך SDK Manager ומוסיפים את הספרייה לפרויקט. לפרטים נוספים, אפשר לעיין במדריך בנושא הגדרת שירותי Google Play.
ציון הרשאות לאפליקציות
אפליקציות שהתכונות שלהן משתמשות בשירותי מיקום צריכות לבקש הרשאות מיקום, בהתאם לתרחישי השימוש של התכונות האלה.
יצירת לקוח של שירותי מיקום
בשיטה onCreate()
של הפעילות, יוצרים מופע של Fused Location Provider Client כמו שמוצג בקטע הקוד הבא.
Kotlin
private lateinit var fusedLocationClient: FusedLocationProviderClient override fun onCreate(savedInstanceState: Bundle?) { // ... fusedLocationClient = LocationServices.getFusedLocationProviderClient(this) }
Java
private FusedLocationProviderClient fusedLocationClient; // .. @Override protected void onCreate(Bundle savedInstanceState) { // ... fusedLocationClient = LocationServices.getFusedLocationProviderClient(this); }
קבלת המיקום הידוע האחרון
אחרי שיוצרים את הלקוח של שירותי המיקום, אפשר לקבל את המיקום האחרון הידוע של המכשיר של המשתמש. כשהאפליקציה מחוברת אליהם, אפשר להשתמש בשיטה getLastLocation()
של ספק המיקום המשולב כדי לאחזר את מיקום המכשיר. רמת הדיוק של המיקום שמוחזר על ידי הקריאה הזו נקבעת לפי הגדרת ההרשאה שמופיעה במניפסט של האפליקציה, כפי שמתואר במדריך בנושא בקשת הרשאות גישה למיקום.
כדי לבקש את המיקום הידוע האחרון, קוראים לשיטה
getLastLocation()
. קטע הקוד הבא ממחיש את הבקשה ואת הטיפול הפשוט בתגובה:
Kotlin
fusedLocationClient.lastLocation .addOnSuccessListener { location : Location? -> // Got last known location. In some rare situations this can be null. }
Java
fusedLocationClient.getLastLocation() .addOnSuccessListener(this, new OnSuccessListener<Location>() { @Override public void onSuccess(Location location) { // Got last known location. In some rare situations this can be null. if (location != null) { // Logic to handle location object } } });
השיטה
getLastLocation()
מחזירה Task
שאפשר להשתמש בו כדי לקבל אובייקט
Location
עם הקואורדינטות של קו האורך וקו הרוחב של
מיקום גיאוגרפי. אובייקט המיקום יכול להיות null
במצבים הבאים:
- שירותי המיקום מושבתים בהגדרות המכשיר. התוצאה יכולה להיות
null
גם אם המיקום האחרון אוחזר בעבר, כי השבתת המיקום מוחקת גם את המטמון. - המכשיר אף פעם לא תיעד את המיקום שלו, וזה יכול לקרות במכשיר חדש או במכשיר ששוחזר להגדרות המקוריות.
- שירותי Google Play במכשיר הופעלו מחדש, ואין לקוח פעיל של ספק מיקום משולב שביקש מיקום אחרי שהשירותים הופעלו מחדש. כדי להימנע מהמצב הזה, אפשר ליצור לקוח חדש ולבקש עדכוני מיקום בעצמכם. מידע נוסף זמין במאמר בנושא בקשת עדכונים של מיקומי העסק.
בחירת האומדן הטוב ביותר של המיקום
ה-API FusedLocationProviderClient
מספק כמה שיטות לאחזור מידע על מיקום המכשיר. בוחרים אחת מהאפשרויות הבאות, בהתאם לתרחיש השימוש באפליקציה:
getLastLocation()
מקבל הערכת מיקום מהר יותר ומצמצם את השימוש בסוללה שאפשר לשייך לאפליקציה. עם זאת, יכול להיות שמידע המיקום לא יהיה עדכני אם אף לקוח אחר לא השתמש במיקום באופן פעיל לאחרונה.getCurrentLocation()
מקבל מיקום עדכני ומדויק יותר באופן עקבי יותר. עם זאת, השיטה הזו עלולה לגרום לחישוב פעיל של המיקום במכשירזו הדרך המומלצת לקבל מיקום עדכני, כשזה אפשרי, והיא בטוחה יותר מאפשרויות חלופיות כמו הפעלה וניהול של עדכוני מיקום באופן עצמאי באמצעות
requestLocationUpdates()
. אם האפליקציה שלכם קוראת ל-requestLocationUpdates()
, היא עלולה לצרוך כמויות גדולות של חשמל אם המיקום לא זמין, או אם הבקשה לא נעצרת בצורה נכונה אחרי קבלת מיקום חדש.
מקורות מידע נוספים
מידע נוסף על אחזור המיקום הנוכחי ב-Android זמין במקורות הבאים:
טעימות
- אפליקציה לדוגמה שמדגימה שיטות מומלצות לאחזור המיקום הנוכחי.