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

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

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

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

Android 10

Android 11

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

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

מה צריך לעשות

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

מה צריך?

  • Android Studio 3.4 ואילך כדי להריץ את הקוד
  • מכשיר/אמולטור שבו פועלת תצוגה מקדימה של מפתח ל-Android 10 ו-Android 11

שכפול ההקלטה של הפרויקט למתחילים

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

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

אתם מוזמנים לבקר ישירות בדף GitHub.

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

להורדת קובץ ZIP

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

פותחים את Android Studio, בוחרים באפשרות "פותחים פרויקט Android Studio קיים&במסך הפתיחה ופותחים את ספריית הפרויקט.

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

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

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

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

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

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

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

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

רכיבי המפתח כוללים את:

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

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

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

הפעלת הפרויקט למתחילים

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

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


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


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

מושגים

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

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

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

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

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

שירותים, שירותים בחזית ושיוך

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

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

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

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

הרשאות

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

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

Location

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

מעיינים בכיתות המרכזיות:

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

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

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

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

הרשאות

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

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

  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

עיון באתחול של FuseLocationProviderClient

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

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

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

הפעלה של בקשת המיקום

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

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

// TODO: Step 1.3, Create a LocationRequest.
locationRequest = LocationRequest().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. קראו את התגובות כדי להבין איך כל אחת מהן פועלת.

אתחול של CallCallback

  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)

       if (locationResult?.lastLocation != null) {

           // 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 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))
           }
       } else {
           Log.d(TAG, "Location information isn't available.")
       }
   }
}

הפונקציה 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.myLooper())

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

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

ייתכן גם שהקוד הזה נמצא בהצהרת 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.

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

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

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

יעד SDK 29

  1. במודול base, יש לחפש TODO: Step 2.1, Target SDK 10 בקובץ build.gradle.
  2. מבצעים את השינויים הבאים:
  1. יש להגדיר את compileSdkVersion כ-29.
  2. יש להגדיר את buildToolsVersion כ-"29.0.3".
  3. יש להגדיר את targetSdkVersion כ-29.

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

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

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

לאחר מכן, האפליקציה כמעט מוכנה ל-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>

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

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

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

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

בסעיף זה, אתם מטרגטים ל-Android 11.

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

Target SDK R

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

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

android {
   // TODO: Step 2.1, Target Android 10.
   compileSdkVersion "android-R"
   buildToolsVersion "29.0.2"
   defaultConfig {
       applicationId "com.example.android.whileinuselocation"
       minSdkVersion 26
       targetSdkVersion "R"
       versionCode 1
       versionName "1.0"
   }
...
}

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

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

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

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

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

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

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

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

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

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

תמיכה בחיזוק חינני אם לא ניתנה הרשאה

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

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

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

למידע נוסף