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

באמצעות ממשקי ה-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.

הגדרת הרשאות שניתנות לאפליקציה

באפליקציות שכוללות תכונות שמשתמשות בשירותי מיקום, צריך לבקש הרשאות מיקום בהתאם לתרחישי השימוש של התכונות האלה.

יצירת לקוח של שירותי מיקום

במתודה 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);
}

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

אחרי שיוצרים את הלקוח של שירותי המיקום, אפשר לקבל את המיקום האחרון הידוע של מכשיר המשתמש. כשהאפליקציה מחוברת אליהם, אפשר להשתמש ב-method‏ getLastLocation() של ספק המיקום המשולב כדי לאחזר את מיקום המכשיר. רמת הדיוק של המיקום שמוחזר על ידי הקריאה הזו נקבעת לפי הגדרת ההרשאה שהזנתם במניפסט של האפליקציה, כפי שמתואר במדריך בנושא בקשת הרשאות מיקום.

כדי לבקש את המיקום הידוע האחרון, מפעילים את ה-method‏ 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
                }
            }
        });

ה-method‏ getLastLocation() מחזירה אובייקט Task שאפשר להשתמש בו כדי לקבל אובייקט Location עם הקואורדינטות של קו הרוחב וקו האורך של מיקום גיאוגרפי. אובייקט המיקום יכול להיות null במצבים הבאים:

  • שירותי המיקום מושבתים בהגדרות המכשיר. התוצאה יכולה להיות null גם אם המיקום האחרון אוחזר בעבר, כי השבתת המיקום גם מנקה את המטמון.
  • המכשיר אף פעם לא תיעד את המיקום שלו, למשל אם מדובר במכשיר חדש או במכשיר ששוחזר להגדרות המקוריות.
  • ‫Google Play Services במכשיר הופעלו מחדש, ואין לקוח פעיל של ספק מיקום משולב שביקש מיקום אחרי שהשירותים הופעלו מחדש. כדי להימנע מהמצב הזה, אתם יכולים ליצור לקוח חדש ולבקש עדכוני מיקום בעצמכם. מידע נוסף זמין במאמר בקשת עדכוני מיקום.

בחירת המיקום המשוער הכי מדויק

ב-FusedLocationProviderClient יש כמה שיטות לאחזור נתוני המיקום של המכשיר. בוחרים באחת מהאפשרויות הבאות, בהתאם לתרחיש לדוגמה של האפליקציה:

  • getLastLocation() מקבל הערכת מיקום מהר יותר וממזער את השימוש בסוללה שניתן לייחס לאפליקציה. עם זאת, יכול להיות שנתוני המיקום לא יהיו עדכניים אם אף לקוח אחר לא השתמש במיקום באופן פעיל לאחרונה.
  • getCurrentLocation() מקבל מיקום עדכני ומדויק יותר באופן עקבי יותר. עם זאת, השיטה הזו יכולה לגרום לחישוב מיקום פעיל במכשיר,

    זו הדרך המומלצת לקבל מיקום עדכני, כשאפשר, והיא בטוחה יותר מחלופות כמו הפעלה וניהול של עדכונים לגבי מיקום בעצמכם באמצעות requestLocationUpdates(). אם האפליקציה קוראת ל-requestLocationUpdates(), היא עלולה לצרוך כמויות גדולות של חשמל אם המיקום לא זמין, או אם הבקשה לא נעצרת בצורה נכונה אחרי קבלת מיקום חדש.

מקורות מידע נוספים

למידע נוסף על אחזור המיקום הנוכחי ב-Android, אפשר לעיין במקורות המידע הבאים:

דוגמאות