קבלת המיקום הידוע האחרון

באמצעות ממשקי ה-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, קראו את החומרים הבאים:

דוגמיות