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

באמצעות ממשקי ה-API של מיקום של Google Play Services, האפליקציה שלכם יכולה לבקש את מיקום ידוע של המכשיר של המשתמש. ברוב המקרים, תרצו המיקום הנוכחי של המשתמש, שבדרך כלל מקביל למיקום הידוע האחרון מיקום המכשיר.

ספציפית, צריך להשתמש Fused (ממוזג) ספק מיקום כדי לאחזר את המיקום הידוע האחרון של המכשיר. השילוב ספק המיקום הוא אחד מממשקי ה-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 במכשיר הופעלה מחדש, ואין אף אפליקציה פעילה לקוח של ספק מיקום משולב שביקש מיקום אחרי הופעלו מחדש. כדי להימנע ממצב כזה אפשר ליצור לקוח חדש לבקש עדכוני מיקום בעצמך. למידע נוסף, ראה קבלת מיקום עדכונים.

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

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

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

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

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

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

דוגמיות