קבלת עדכוני מיקום ב-Android עם Kotlin

1. לפני שמתחילים

ב-Android מגרסה 10 ו-11 המשתמשים מקבלים יותר שליטה באפליקציות שלהם גישה למיקומי המכשירים שלהם.

כשאפליקציה שפועלת ב-Android 11 מבקשת גישה למיקום, למשתמשים יש ארבע אפשרויות:

  • כן, כל הזמן
  • מותר רק כשהאפליקציה בשימוש (ב-Android 10)
  • פעם אחת בלבד (ב-Android 11)
  • דחייה

Android 10

6a1029175b467c77.png

Android 11

73d8cc88c5877c25.png

ב-Codelab הזה תלמדו איך לקבל עדכוני מיקום ואיך לתמוך במיקום בכל גרסה של Android, במיוחד ב-Android 10 ו-Android 11. בסוף ה-Codelab, צפויה להיות אפליקציה לפי השיטות המומלצות הנוכחיות לאחזור עדכוני מיקום.

דרישות מוקדמות

מה תעשו

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

מה צריך להכין

  • כדי להריץ את הקוד ב-Android Studio 3.4 ואילך
  • מכשיר או אמולטור שבו פועלת גרסת טרום-השקה (Preview) למפתחים של Android 10 ו-Android 11

2. תחילת העבודה

שכפול המאגר של הפרויקט לתחילת העבודה

כדי להתחיל לעבוד במהירות האפשרית, תוכלו להתבסס על הפרויקט הזה לתחילת העבודה. אם התקנתם את Git, תוכלו פשוט להריץ את הפקודה הבאה:

 git clone https://github.com/android/codelab-while-in-use-location

אפשר להיכנס ישירות לדף ב-GitHub.

אם אין לכם Git, תוכלו לקבל את הפרויקט כקובץ ZIP:

ייבוא הפרויקט

פותחים את Android Studio ובוחרים באפשרות Open an existing Android Studio project (פתיחת פרויקט קיים של Android Studio). ממסך הפתיחה, ופותחים את ספריית הפרויקט.

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

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

fa825dae96c5dc18.png

יש שתי תיקיות (base ו-complete). כל אחת מהן נקראת 'מודול'.

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

c2273e7835c0841a.png

צריך להמתין עד ש-Android Studio יסיים להוסיף לאינדקס ולבנות את הפרויקט לפני שמבצעים שינויים בקוד. כך מערכת Android Studio תוכל לשלוף את כל הרכיבים הנחוצים.

אם מופיעה ההודעה לטעון מחדש כדי ששינויי השפה ייכנסו לתוקף? או הודעה דומה, בוחרים באפשרות כן.

הסבר על הפרויקט לתחילת הפעולה

הכול מוכן ואפשר לבקש מיקום באפליקציה. משתמשים במודול base כנקודת ההתחלה. בכל שלב מוסיפים קוד למודול base. בסיום השימוש ב-Codelab הזה, הקוד במודול base אמור להתאים לתוכן של המודול complete. אפשר להשתמש במודול complete לבדיקת העבודה או לעיונך במקרה של בעיות.

הרכיבים העיקריים כוללים:

  • MainActivity – ממשק המשתמש של המשתמש שמאפשר לאפליקציה לגשת למיקום המכשיר
  • LocationService – שירות נרשם לשינויי מיקום ומבטל את ההרשמה אליו, ומקדם את עצמו לשירות שפועל בחזית (עם התראה) אם המשתמש מנווט אל מחוץ לפעילות של האפליקציה. כאן מוסיפים קוד מיקום.
  • Util – הוספת פונקציות של תוספים למחלקה Location ושמירת המיקום ב-SharedPreferences (שכבת נתונים פשוטה יותר).

הגדרת אמולטור

מידע על הגדרה של אמולטור Android זמין במאמר הפעלה באמצעות אמולטור.

הפעלת פרויקט לתחילת העבודה

מפעילים את האפליקציה.

  1. מחברים את מכשיר Android למחשב או מפעילים אמולטור. (במכשיר צריכה להיות מותקנת מערכת Android מגרסה 10 ואילך).
  2. בסרגל הכלים, בוחרים את ההגדרות האישיות של base מהבורר הנפתח ולוחצים על Run:

99600e9d44527ab.png

  1. האפליקציה הבאה מופיעה במכשיר:

99bf1dae46f99af3.png

יכול להיות שלא יופיעו פרטי מיקום במסך הפלט. הסיבה לכך היא שעדיין לא הוספת את קוד המיקום.

3. הוספת מיקום

מושגים

המטרה של Codelab הזו היא להראות לך איך לקבל עדכוני מיקום, ובסופו של דבר לתמוך ב-Android 10 וב-Android 11.

עם זאת, לפני שתתחילו לתכנת, כדאי לעיין בעקרונות הבסיסיים.

סוגי גישה למיקום

יכול להיות שתזכרו את ארבע האפשרויות השונות לגישה למיקום כבר בתחילת ה-Codelab. כדאי לבחון את משמעות הסטטוסים:

  • רק כשהאפליקציה בשימוש
  • האפשרות הזו מומלצת לרוב האפליקציות. נקרא גם 'בזמן השימוש' או 'חזית בלבד' גישה, האפשרות הזו נוספה ב-Android 10 והיא מאפשרת למפתחים לאחזר את המיקום רק כשהאפליקציה בשימוש באופן פעיל. אפליקציה נחשבת כפעילה אם מתקיים אחד מהתנאים הבאים:
  • פעילות גלויה.
  • שירות שפועל בחזית פועל עם התראה מתמשכת.
  • פעם אחת בלבד
  • ב-Android 11, האפשרות הזו זהה לרק כשהאפליקציה בשימוש, אבל לפרק זמן מוגבל. אפשר לקרוא מידע נוסף במאמר בנושא הרשאות חד-פעמיות.
  • דחייה
  • האפשרות הזו מונעת גישה לפרטי המיקום.
  • מותר כל הזמן
  • האפשרות הזו מאפשרת גישה למיקום כל הזמן, אבל נדרשת הרשאה נוספת ב-Android 10 ואילך. כמו כן, עליכם לוודא שיש לכם תרחיש לדוגמה תקף ולעמוד בדרישות של המדיניות בנושא מיקום. האפשרות הזו לא תעסוק ב-Codelab הזה, כי הוא תרחיש שימוש נדיר יותר. עם זאת, אם יש לכם תרחיש לדוגמה תקף ואתם רוצים להבין איך לטפל כראוי במיקום כל הזמן, כולל גישה למיקום ברקע, יש לעיין בדוגמה שלLocationUpdatesBackgroundKotlin.

שירותים, שירותים שפועלים בחזית וקישורים

כדי לקבל תמיכה מלאה בעדכוני מיקום מסוג רק כשהאפליקציה בשימוש, צריך להביא בחשבון את הזמן שבו המשתמש מנווט אל מחוץ לאפליקציה. כדי להמשיך לקבל עדכונים במצב הזה, צריך ליצור Service חזית ולשייך אותה ל-Notification.

בנוסף, אם רוצים להשתמש באותו Service כדי לבקש עדכוני מיקום כשהאפליקציה גלויה וכשהמשתמש מנווט אל מחוץ לאפליקציה, צריך לקשר את Service או לבטל את הקישור שלו לרכיב ממשק המשתמש.

ה-Codelab הזה מתמקד רק בעדכוני מיקום, ולכן אפשר למצוא את כל הקוד שצריך במחלקה ForegroundOnlyLocationService.kt. אפשר לעיין בכיתה הזו ובMainActivity.kt כדי לראות איך הם פועלים יחד.

מידע נוסף זמין במאמרים סקירה כללית על השירותים וסקירה כללית על שירותים קשורים.

הרשאות

כדי לקבל עדכוני מיקום מ-NETWORK_PROVIDER או מ-GPS_PROVIDER, צריך לבקש את הרשאת המשתמש על ידי הצהרה על ההרשאה ACCESS_COARSE_LOCATION או ACCESS_FINE_LOCATION בהתאמה, בקובץ המניפסט של Android. בלי ההרשאות האלה, האפליקציה לא תוכל לבקש גישה למיקום בזמן הריצה.

ההרשאות האלה חלות על מקרים שבהם האפליקציה משתמשת בפעם אחת בלבד ובאפליקציה רק בזמן השימוש במכשיר Android מגרסה 10 ואילך.

מיקום

האפליקציה שלך יכולה לגשת לקבוצת שירותי המיקום הנתמכים באמצעות מחלקות בחבילה com.google.android.gms.location.

אפשר לראות את הכיתות העיקריות:

  • FusedLocationProviderClient
  • זהו הרכיב המרכזי של מסגרת המיקום. אחרי שתיצרו אותו, תוכלו להשתמש בו כדי לבקש עדכוני מיקום ולקבל את המיקום הידוע האחרון.
  • LocationRequest
  • זהו אובייקט נתונים שמכיל פרמטרים של איכות השירות לבקשות (מרווחי זמן לעדכונים, לעדיפויות ולדיוק). כשמבקשים עדכוני מיקום, הפרטים האלה מועברים אל FusedLocationProviderClient.
  • LocationCallback
  • ההגדרה הזו משמשת לקבלת התראות כשמיקום המכשיר השתנה או שלא ניתן לקבוע אותו יותר. ההעברה מועברת LocationResult, שבו תוכלו לשמור את ה-Location במסד הנתונים שלכם.

עכשיו, אחרי שיש לכם מושג בסיסי מה אתם עושים, תוכלו להתחיל עם הקוד!

4. הוספת תכונות של מיקום

ה-Codelab הזה מתמקד באפשרות המיקום הנפוצה ביותר: רק כשהאפליקציה בשימוש.

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

הרשאות

המטרה של ה-Codelab הזה היא להראות איך לקבל עדכוני מיקום ולא איך לבקש הרשאות מיקום, כך שהקוד שמבוסס על הרשאות כבר נכתב עבורכם. אפשר לדלג עליה אם כבר הבנת אותה.

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

  1. יש להצהיר באיזו הרשאה משתמשים בAndroidManifest.xml.
  2. לפני שמנסים לגשת לפרטי המיקום, צריך לבדוק אם המשתמש נתן לאפליקציה הרשאה לעשות זאת. אם האפליקציה שלך עדיין לא קיבלה הרשאה, צריך לבקש גישה.
  3. מטפלים בבחירת ההרשאה של המשתמש. (אפשר לראות את הקוד הזה כאן: MainActivity.kt).

אם מחפשים את TODO: Step 1.0, Review Permissions ב-AndroidManifest.xml או ב-MainActivity.kt, רואים את כל הקוד שנכתב עבור הרשאות.

לסקירה כללית על הרשאות

עכשיו מתחילים לכתוב קוד מיקום.

לבדוק את המשתנים העיקריים שדרושים לצורך עדכוני מיקום

במודול base, מחפשים את TODO: Step 1.1, Review variables ב

קובץ ForegroundOnlyLocationService.kt.

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

// TODO: Step 1.1, Review variables (no changes).
// FusedLocationProviderClient - Main class for receiving location updates.
private lateinit var fusedLocationProviderClient: FusedLocationProviderClient

// LocationRequest - Requirements for the location updates, i.e., how often you
// should receive updates, the priority, etc.
private lateinit var locationRequest: LocationRequest

// LocationCallback - Called when FusedLocationProviderClient has a new Location.
private lateinit var locationCallback: LocationCallback

// Used only for local storage of the last known location. Usually, this would be saved to your
// database, but because this is a simplified sample without a full database, we only need the
// last location to create a Notification if the user navigates away from the app.
private var currentLocation: Location? = null

בדיקת האתחול של FusedLocationProviderClient

במודול base, מחפשים את TODO: Step 1.2, Review the FusedLocationProviderClient בקובץ ForegroundOnlyLocationService.kt. הקוד אמור להיראות כך:

// TODO: Step 1.2, Review the FusedLocationProviderClient.
fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this)

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

לאתחל את ה-LocationRequest

  1. במודול base, מחפשים את TODO: Step 1.3, Create a LocationRequest בקובץ ForegroundOnlyLocationService.kt.
  2. מוסיפים את הקוד הבא אחרי התגובה.

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

// TODO: Step 1.3, Create a LocationRequest.
locationRequest = LocationRequest.create().apply {
   // Sets the desired interval for active location updates. This interval is inexact. You
   // may not receive updates at all if no location sources are available, or you may
   // receive them less frequently than requested. You may also receive updates more
   // frequently than requested if other applications are requesting location at a more
   // frequent interval.
   //
   // IMPORTANT NOTE: Apps running on Android 8.0 and higher devices (regardless of
   // targetSdkVersion) may receive updates less frequently than this interval when the app
   // is no longer in the foreground.
   interval = TimeUnit.SECONDS.toMillis(60)

   // Sets the fastest rate for active location updates. This interval is exact, and your
   // application will never receive updates more frequently than this value.
   fastestInterval = TimeUnit.SECONDS.toMillis(30)

   // Sets the maximum time when batched location updates are delivered. Updates may be
   // delivered sooner than this interval.
   maxWaitTime = TimeUnit.MINUTES.toMillis(2)

   priority = LocationRequest.PRIORITY_HIGH_ACCURACY
}
  1. כדאי לקרוא את התגובות כדי להבין איך כל אחת מהן עובדת.

הפעלת ה-LocationCallback

  1. במודול base, מחפשים את TODO: Step 1.4, Initialize the LocationCallback בקובץ ForegroundOnlyLocationService.kt.
  2. מוסיפים את הקוד הבא אחרי התגובה.
// TODO: Step 1.4, Initialize the LocationCallback.
locationCallback = object : LocationCallback() {
    override fun onLocationResult(locationResult: LocationResult) {
        super.onLocationResult(locationResult)

        // Normally, you want to save a new location to a database. We are simplifying
        // things a bit and just saving it as a local variable, as we only need it again
        // if a Notification is created (when the user navigates away from app).
        currentLocation = locationResult.lastLocation

        // Notify our Activity that a new location was added. Again, if this was a
        // production app, the Activity would be listening for changes to a database
        // with new locations, but we are simplifying things a bit to focus on just
        // learning the location side of things.
        val intent = Intent(ACTION_FOREGROUND_ONLY_LOCATION_BROADCAST)
        intent.putExtra(EXTRA_LOCATION, currentLocation)
        LocalBroadcastManager.getInstance(applicationContext).sendBroadcast(intent)

        // Updates notification content if this service is running as a foreground
        // service.
        if (serviceRunningInForeground) {
            notificationManager.notify(
                NOTIFICATION_ID,
                generateNotification(currentLocation))
        }
    }
}

הLocationCallback שיוצרים כאן היא הקריאה החוזרת שאליה יתקשר FusedLocationProviderClient כשיהיה עדכון חדש של המיקום.

בקריאה החוזרת, מקבלים קודם את המיקום האחרון באמצעות אובייקט LocationResult. לאחר מכן, עליך להודיע ל-Activity על המיקום החדש באמצעות שידור מקומי (אם הוא פעיל) או לעדכן את Notification אם השירות הזה יפעל כחזית Service.

  1. קוראים את התגובות כדי להבין מה כל חלק עושה.

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

עכשיו, לאחר שאתחול הכול, עליך להודיע ל-FusedLocationProviderClient שברצונך לקבל עדכונים.

  1. במודול base, מחפשים את Step 1.5, Subscribe to location changes בקובץ ForegroundOnlyLocationService.kt.
  2. מוסיפים את הקוד הבא אחרי התגובה.
// TODO: Step 1.5, Subscribe to location changes.
fusedLocationProviderClient.requestLocationUpdates(locationRequest, locationCallback, Looper.getMainLooper())

השיחה עם requestLocationUpdates() מאשרת ל-FusedLocationProviderClient על כך שברצונך לקבל עדכוני מיקום.

אתה בטח מזהה את LocationRequest ואת LocationCallback שהגדרת קודם לכן. האותות האלה מאפשרים ל-FusedLocationProviderClient לדעת מהם הפרמטרים של איכות השירות בבקשה שלך ומה צריך לקרוא אליהם כשיש עדכון. לבסוף, האובייקט Looper מציין את השרשור של הקריאה החוזרת.

יכול להיות גם שהקוד הזה נמצא בתוך דף חשבון try/catch. לשיטה הזו נדרש חסימה כזו כי SecurityException מתרחשת כשלאפליקציה אין הרשאת גישה לפרטי המיקום.

ביטול ההרשמה לשינויי מיקום

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

  1. במודול base, מחפשים את TODO: Step 1.6, Unsubscribe to location changes בקובץ ForegroundOnlyLocationService.kt.
  2. מוסיפים את הקוד הבא אחרי התגובה.
// TODO: Step 1.6, Unsubscribe to location changes.
val removeTask = fusedLocationProviderClient.removeLocationUpdates(locationCallback)
removeTask.addOnCompleteListener { task ->
   if (task.isSuccessful) {
       Log.d(TAG, "Location Callback removed.")
       stopSelf()
   } else {
       Log.d(TAG, "Failed to remove Location Callback.")
   }
}

השיטה removeLocationUpdates() מגדירה משימה כדי להודיע ל-FusedLocationProviderClient שאינך רוצה יותר לקבל עדכוני מיקום למכשיר LocationCallback. הפונקציה addOnCompleteListener() מחזירה את הקריאה החוזרת להשלמת הפעולה ומבצעת את Task.

כמו בשלב הקודם, ייתכן ששמת לב שהקוד הזה נמצא בתוך הצהרה try/catch. לשיטה הזו נדרש חסימה כזו כי SecurityException מתרחש כשאין לאפליקציה שלך הרשאת גישה לפרטי המיקום

ייתכן שתשאלו את עצמכם מתי מתבצעת ההפעלה של השיטות שמכילות את קוד ההרשמה/ביטול ההרשמה. הן מופעלות בכיתה הראשית כשהמשתמש מקיש על הלחצן. אם ברצונך לראות אותו, עליך לעיין בכיתה MainActivity.kt.

הפעלת האפליקציה

מפעילים את האפליקציה מ-Android Studio ומנסים ללחוץ על לחצן המיקום.

פרטי המיקום אמורים להופיע במסך הפלט. זוהי אפליקציה ל-Android 9 שיש בה פונקציונליות מלאה.

2ae45c4e297e3681.png

d66089bfb532e993.png

5. תמיכה ב-Android 10

בקטע הזה מוסיפים תמיכה ב-Android 10.

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

למעשה, כל מה שצריך לעשות הוא לציין שהשירות שפועל בחזית משמש למטרות מיקום.

Target SDK 29

  1. במודול base, מחפשים את TODO: Step 2.1, Target Android 10 and then Android 11. בקובץ build.gradle.
  2. מבצעים את השינויים הבאים:
  3. מגדירים את targetSdkVersion להיות 29.

הקוד אמור להיראות כך:

android {
   // TODO: Step 2.1, Target Android 10 and then Android 11.
   compileSdkVersion 29
   defaultConfig {
       applicationId "com.example.android.whileinuselocation"
       minSdkVersion 26
       targetSdkVersion 29
       versionCode 1
       versionName "1.0"
   }
...
}

לאחר מכן תתבקשו לסנכרן את הפרויקט. לוחצים על סנכרון עכשיו.

153f70847e0ec320.png

לאחר מכן, האפליקציה כמעט מוכנה ל-Android 10.

הוספת סוג שירות שפועל בחזית

ב-Android 10, אם אתם צריכים גישה למיקום בזמן השימוש, צריך לכלול את סוג השירות שפועל בחזית. במקרה שלך, הוא משמש לקבלת פרטי המיקום.

במודול base, מחפשים את TODO: 2.2, Add foreground service type ב-AndroidManifest.xml ומוסיפים את הקוד הבא לרכיב <service>:

android:foregroundServiceType="location"

הקוד אמור להיראות כך:

<application>
   ...

   <!-- Foreground services in Android 10+ require type. -->
   <!-- TODO: 2.2, Add foreground service type. -->
   <service
       android:name="com.example.android.whileinuselocation.ForegroundOnlyLocationService"
       android:enabled="true"
       android:exported="false"
       android:foregroundServiceType="location" />
</application>

זהו! האפליקציה תומכת במיקום עם Android 10 במצב 'בזמן השימוש' פועלים לפי השיטות המומלצות למיקום ב-Android.

הפעלת האפליקציה

מפעילים את האפליקציה מ-Android Studio ומנסים ללחוץ על לחצן המיקום.

הכול אמור לפעול כמו קודם, אבל עכשיו הוא פועל ב-Android 10. אם לא אישרתם את ההרשאות למיקומים בעבר, מסך ההרשאות אמור להופיע עכשיו.

6a1029175b467c77.png

c7c1d226e49a121.png

39a262b66a275f66.png

6. תמיכה ב-Android 11

בקטע הזה מטרגטים את Android 11.

חדשות טובות, אין צורך לבצע שינויים באף קובץ חוץ מהקובץ build.gradle!

יעד SDK 11

  1. במודול base, מחפשים את TODO: Step 2.1, Target SDK בקובץ build.gradle.
  2. מבצעים את השינויים הבאים:
  3. compileSdkVersion עד 30
  4. targetSdkVersion עד 30

הקוד אמור להיראות כך:

android {
   TODO: Step 2.1, Target Android 10 and then Android 11.
   compileSdkVersion 30
   defaultConfig {
       applicationId "com.example.android.whileinuselocation"
       minSdkVersion 26
       targetSdkVersion 30
       versionCode 1
       versionName "1.0"
   }
...
}

לאחר מכן תתבקשו לסנכרן את הפרויקט. לוחצים על סנכרון עכשיו.

153f70847e0ec320.png

לאחר מכן האפליקציה תהיה מוכנה ל-Android 11.

הפעלת האפליקציה

מפעילים את האפליקציה מ-Android Studio ומנסים ללחוץ על הלחצן.

הכול אמור לפעול כמו קודם, אבל עכשיו הוא פועל ב-Android 11. אם לא אישרתם את ההרשאות למיקומים בעבר, מסך ההרשאות אמור להופיע עכשיו.

73d8cc88c5877c25.png

cc98fac6e089bc4.png

7. שיטות מיקום ל-Android

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

בדף הזה מפורטות כמה שיטות מומלצות עיקריות שקשורות להרשאות מיקום. למידע נוסף על שימור המשתמשים בטוחים לנתונים? תוכלו לעיין במאמר שיטות מומלצות בנושא הרשאות הניתנות לאפליקציה.

לבקש רק את ההרשאות הדרושות

מבקשים הרשאות רק כשצריך. לדוגמה:

  • אל תבקש הרשאת מיקום בעת הפעלת האפליקציה, אלא אם הדבר הכרחי.
  • אם האפליקציה שלך מטרגטת את Android 10 ואילך ויש לך שירות שפועל בחזית, צריך להצהיר על foregroundServiceType של "location" במניפסט.
  • אין לבקש הרשאות מיקום ברקע, אלא אם יש לכם תרחיש תקף לדוגמה כפי שמתואר במאמר גישה בטוחה ושקופה יותר למיקום המשתמש.

תמיכה בפגיעה חיננית אם לא ניתנה הרשאה

כדי לשמור על חוויית משתמש טובה, כדאי לתכנן את האפליקציה כך שהיא תוכל להתמודד עם המצבים הבאים בצורה חלקה:

  • לאפליקציה שלך אין גישה לפרטי המיקום.
  • לאפליקציה שלך אין גישה לפרטי המיקום כשהיא פועלת ברקע.

8. מזל טוב

למדת איך לקבל עדכוני מיקום ב-Android, בהתאם לשיטות המומלצות!

מידע נוסף