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

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

אחזור המיקום הידוע האחרון

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

דוגמיות