באמצעות ממשקי ה-API למיקום של Google Play Services, האפליקציה יכולה לבקש את המיקום הידוע האחרון של המכשיר של המשתמש. ברוב המקרים, אתם רוצים לדעת מה המיקום הנוכחי של המשתמש, שהוא בדרך כלל זהה למיקום האחרון הידוע של המכשיר.
באופן ספציפי, צריך להשתמש בספק המיקום המאוחד כדי לאחזר את המיקום האחרון הידוע של המכשיר. ספק המיקום הממוזג הוא אחד מממשקי ה-API למיקום ב-Google Play Services. הוא מנהל את טכנולוגיית המיקום הבסיסית ומספק ממשק API פשוט, כדי שתוכלו לציין דרישות ברמה גבוהה, כמו דיוק גבוה או צריכת אנרגיה נמוכה. בנוסף, המערכת מבצעת אופטימיזציה של השימוש בסוללה במכשיר.
הערה: כשהאפליקציה פועלת ברקע, גישה למיקום צריכה להיות קריטית לפונקציונליות העיקרית של האפליקציה, וצריך להציג למשתמשים גילוי נאות מתאים.
בשיעור הזה מוסבר איך לשלוח בקשה אחת למיקום של
מכשיר באמצעות השיטה
getLastLocation()
בספק המיקום המשולב.
הגדרת Google Play Services
כדי לגשת לספק המיקום המשולב, פרויקט הפיתוח של האפליקציה חייב לכלול את Google Play Services. מורידים ומתקינים את הרכיב של Google Play Services דרך מנהל ה-SDK ומוסיפים את הספרייה לפרויקט. לפרטים נוספים, אפשר לעיין במדריך הגדרת שירותי Google Play.
ציון ההרשאות שניתנות לאפליקציה
אפליקציות שהתכונות שלהן משתמשות בשירותי מיקום חייבות לבקש הרשאות מיקום, בהתאם לתרחישי השימוש בתכונות האלה.
יצירת לקוח של שירותי המיקום
ב-method onCreate()
של הפעילות, יוצרים מופע של הלקוח של ספק המיקום המשולב, כפי שמתואר בקטע הקוד הבא.
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 Services במכשיר הופעל מחדש, ואין לקוח פעיל של Fused Location Provider שביקש מיקום אחרי שהשירותים הופעלו מחדש. כדי להימנע ממצב כזה, אתם יכולים ליצור לקוח חדש ולבקש לקבל עדכוני מיקום בעצמכם. מידע נוסף זמין במאמר קבלת עדכוני מיקום.
בחירת אומדן המיקום הטוב ביותר
ב-FusedLocationProviderClient
יש כמה שיטות לאחזור מידע על המיקום של המכשיר. בוחרים אחת מהאפשרויות הבאות, בהתאם לתרחיש לדוגמה של האפליקציה:
getLastLocation()
מקבלת הערכה של המיקום מהר יותר ומצמצמת את השימוש בסוללה שאפשר לשייך לאפליקציה. עם זאת, ייתכן שמידע המיקום יהיה לא עדכני אם לקוחות אחרים לא השתמשו במיקום באופן פעיל לאחרונה.getCurrentLocation()
מקבל מיקום עדכני ומדויק יותר באופן עקבי יותר. עם זאת, השיטה הזו עלולה לגרום לחישוב פעיל של המיקום במכשירזו הדרך המומלצת לקבל מיקום עדכני, כשהדבר אפשרי, והיא בטוחה יותר מחלופות כמו הפעלה וניהול של עדכוני המיקום בעצמכם באמצעות
requestLocationUpdates()
. אם האפליקציה משתמשת בקריאה ל-requestLocationUpdates()
, לפעמים האפליקציה צריכה לצרוך כמויות גדולות של חשמל אם המיקום לא זמין או אם הבקשה לא נעצרת בצורה נכונה אחרי שהיא מקבלת מיקום חדש.
מקורות מידע נוספים
למידע נוסף על אחזור מיקום נוכחי ב-Android, קראו את החומרים הבאים:
דוגמיות
- אפליקציה לדוגמה להדגמת שיטות מומלצות בזמן אחזור המיקום הנוכחי.