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

Android 11

ב-Codelab הזה תלמדו איך לקבל עדכונים לגבי מיקום ואיך לתמוך במיקום בכל גרסה של Android, במיוחד בגרסאות Android 10 ו-Android 11. בסוף ה-codelab, תהיה לכם אפליקציה שפועלת לפי השיטות המומלצות העדכניות לאחזור עדכוני מיקום.
דרישות מוקדמות
מה תעשו
- כדאי לפעול לפי השיטות המומלצות לשימוש במיקום ב-Android.
- טיפול בהרשאות מיקום בחזית (כשהמשתמש מבקש שהאפליקציה שלכם תקבל גישה למיקום המכשיר בזמן השימוש באפליקציה).
- כדי לשנות אפליקציה קיימת ולהוסיף תמיכה בבקשת גישה למיקום, מוסיפים קוד להרשמה למיקום ולביטול ההרשמה.
- מוסיפים לאפליקציה תמיכה ב-Android 10 וב-Android 11 על ידי הוספת לוגיקה לגישה למיקום בחזית או בזמן השימוש.
מה תצטרכו
- Android Studio בגרסה 3.4 ואילך כדי להריץ את הקוד
- מכשיר או אמולטור שפועלת בהם תצוגה מקדימה למפתחים של 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, אתם צריכים להרחיב את הפרויקט כדי לראות את אותו הדבר).

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

צריך לחכות עד ש-Android Studio יסיים את יצירת האינדקס ואת ה-build של הפרויקט לפני שמבצעים שינויים בקוד. כך Android Studio יוכל למשוך את כל הרכיבים הנדרשים.
אם מופיעה הנחיה שאומרת צריך לטעון מחדש כדי שהשינויים בשפה ייכנסו לתוקף? או משהו דומה, בוחרים באפשרות כן.
הסבר על הפרויקט ההתחלתי
ההגדרה הושלמה ואפשר לבקש את המיקום באפליקציה. משתמשים במודול base כנקודת התחלה. במהלך כל שלב, מוסיפים קוד למודול base. בסיום ה-codelab הזה, הקוד במודול base צריך להיות זהה לתוכן במודול complete. אפשר להשתמש במודול complete כדי לבדוק את העבודה או כדי להתייחס אליו אם נתקלים בבעיות.
הרכיבים העיקריים כוללים את הדברים הבאים:
MainActivity– ממשק משתמש שמאפשר למשתמש להעניק לאפליקציה גישה למיקום המכשירLocationService– שירות שנרשם לשינויים במיקום ומבטל את הרישום, ומקדם את עצמו לשירות שפועל בחזית (עם התראה) אם המשתמש עובר מפעילות האפליקציה. כאן מוסיפים את קוד המיקום.-
Util—מוסיף פונקציות של תוסף למחלקהLocationושומר את המיקום ב-SharedPreferences(שכבת נתונים פשוטה).
הגדרת אמולטור
מידע על הגדרת אמולטור של Android זמין במאמר הרצה באמולטור.
הפעלת פרויקט התחלתי
מפעילים את האפליקציה.
- מחברים את מכשיר Android למחשב או מפעילים אמולטור. (חשוב לוודא שבמכשיר פועלת מערכת Android מגרסה 10 ואילך).
- בסרגל הכלים, בוחרים את ההגדרה
baseמתוך התפריט הנפתח ולוחצים על הרצה:

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

יכול להיות שתשימו לב שלא מופיע מידע על מיקום במסך הפלט. הסיבה לכך היא שעדיין לא הוספתם את קוד המיקום.
3. הוספת מיקום
מושגים
ב-Codelab הזה תלמדו איך לקבל עדכוני מיקום, ובסופו של דבר תהיה לכם אפשרות לתמוך ב-Android מגרסה 10 ומגרסה 11.
עם זאת, לפני שמתחילים לכתוב קוד, כדאי לעבור על היסודות.
סוגי גישה למיקום
יכול להיות שאתם זוכרים את ארבע האפשרויות השונות לגישה למיקום שהוצגו בתחילת ה-codelab. הסבר לגבי משמעות התוויות:
- רק כשהאפליקציה בשימוש
- האפשרות הזו מומלצת לרוב האפליקציות. האפשרות הזו, שנקראת גם גישה 'בזמן השימוש' או 'רק בחזית', נוספה ב-Android 10 ומאפשרת למפתחים לאחזר מיקום רק בזמן שהאפליקציה נמצאת בשימוש פעיל. אפליקציה נחשבת פעילה אם מתקיים אחד מהתנאים הבאים:
- הפעילות גלויה.
- שירות שפועל בחזית מופעל עם התראה מתמשכת.
- רק פעם אחת
- האפשרות הזו נוספה ב-Android מגרסה 11 ואילך, והיא זהה לאפשרות רק כשהאפליקציה בשימוש, אבל היא מוגבלת לפרק זמן מסוים. מידע נוסף זמין במאמר בנושא הרשאות חד-פעמיות.
- דחייה
- האפשרות הזו מונעת גישה לפרטי המיקום.
- כן, כל הזמן
- האפשרות הזו מאפשרת גישה למיקום בכל זמן, אבל נדרשת הרשאה נוספת ב-Android מגרסה 10 ואילך. בנוסף, עליכם לוודא שיש לכם תרחיש שימוש תקף ושאתם עומדים בדרישות מדיניות Google בנושא מיקום. לא נסביר על האפשרות הזו בסדנת הקוד הזו, כי היא מתאימה למקרים נדירים יותר. עם זאת, אם יש לכם תרחיש שימוש תקף ואתם רוצים להבין איך לטפל בצורה נכונה במיקום שמתעדכן כל הזמן, כולל גישה למיקום ברקע, כדאי לעיין בדוגמה 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 הזה היא להראות איך מקבלים עדכוני מיקום, ולא איך מבקשים הרשאות מיקום, ולכן הקוד שמבוסס על הרשאות כבר כתוב בשבילכם. אם כבר ברור לך מה זה, אפשר לדלג על ההסבר.
אלה הן ההרשאות העיקריות (לא נדרשת פעולה בחלק הזה):
- צריך לציין באיזו הרשאה השתמשתם ב-
AndroidManifest.xml. - לפני שמנסים לגשת לפרטי המיקום, צריך לבדוק אם המשתמש נתן לאפליקציה הרשאה לעשות זאת. אם האפליקציה עדיין לא קיבלה הרשאה, צריך לבקש גישה.
- מטפלים בבחירת ההרשאה של המשתמש. (אפשר לראות את הקוד הזה ב
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
- במודול
base, מחפשים אתTODO: Step 1.3, Create a LocationRequestבקובץForegroundOnlyLocationService.kt. - מוסיפים את הקוד הבא אחרי התגובה.
קוד האתחול של 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
}
- כדאי לקרוא את ההערות כדי להבין איך כל אחת מהן פועלת.
אתחול של LocationCallback
- במודול
base, מחפשים אתTODO: Step 1.4, Initialize the LocationCallbackבקובץForegroundOnlyLocationService.kt. - מוסיפים את הקוד הבא אחרי התגובה.
// 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 בחזית.
- כדאי לקרוא את התגובות כדי להבין מה כל חלק עושה.
הרשמה לקבלת עדכונים על שינויים במיקום
אחרי שאתחלתם את הכול, אתם צריכים להודיע ל-FusedLocationProviderClient שאתם רוצים לקבל עדכונים.
- במודול
base, מחפשים אתStep 1.5, Subscribe to location changesבקובץForegroundOnlyLocationService.kt. - מוסיפים את הקוד הבא אחרי התגובה.
// TODO: Step 1.5, Subscribe to location changes.
fusedLocationProviderClient.requestLocationUpdates(locationRequest, locationCallback, Looper.getMainLooper())
הקריאה requestLocationUpdates() מאפשרת ל-FusedLocationProviderClient לדעת שאתם רוצים לקבל עדכוני מיקום.
סביר להניח שתזהו את LocationRequest ואת LocationCallback שהגדרתם קודם. הפרמטרים האלה מאפשרים ל-FusedLocationProviderClient לדעת את פרמטרים איכות השירות של הבקשה שלכם, ואת הפונקציה שהוא צריך להפעיל כשיש עדכון. לבסוף, האובייקט Looper מציין את השרשור של הקריאה החוזרת.
יכול להיות שתשימו לב שהקוד הזה נמצא בתוך הצהרת try/catch. השיטה הזו דורשת חסימה כזו כי SecurityException מתרחש כשאפליקציה לא מקבלת הרשאה לגשת לפרטי מיקום.
ביטול ההרשמה לקבלת עדכונים על שינויים במיקום
כשהאפליקציה כבר לא צריכה גישה לפרטי המיקום, חשוב לבטל את ההרשמה לעדכוני מיקום.
- במודול
base, מחפשים אתTODO: Step 1.6, Unsubscribe to location changesבקובץForegroundOnlyLocationService.kt. - מוסיפים את הקוד הבא אחרי התגובה.
// 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.


5. תמיכה ב-Android 10
בקטע הזה מוסיפים תמיכה ב-Android 10.
האפליקציה שלך כבר מנויה לשינויים במיקום, כך שלא נדרשת הרבה עבודה.
למעשה, כל מה שצריך לעשות הוא לציין שהשירות שפועל בחזית משמש למטרות מיקום.
גרסת יעד של SDK: 29
- במודול
base, מחפשים אתTODO: Step 2.1, Target Android 10 and then Android 11.בקובץbuild.gradle. - מבצעים את השינויים הבאים:
- מגדירים את
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"
}
...
}
אחרי שתעשו את זה, תתבקשו לסנכרן את הפרויקט. לוחצים על סנכרון עכשיו.

אחרי זה, האפליקציה שלכם כמעט מוכנה ל-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. אם לא אישרתם את ההרשאות למיקומים קודם, עכשיו אמור להופיע מסך ההרשאות.



6. תמיכה ב-Android 11
בקטע הזה, אתם מטרגטים את Android 11.
חדשות טובות! לא צריך לבצע שינויים באף קובץ חוץ מקובץ build.gradle.
גרסת יעד של SDK 11
- במודול
base, מחפשים אתTODO: Step 2.1, Target SDKבקובץbuild.gradle. - מבצעים את השינויים הבאים:
compileSdkVersionעד30targetSdkVersionעד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"
}
...
}
אחרי שתעשו את זה, תתבקשו לסנכרן את הפרויקט. לוחצים על סנכרון עכשיו.

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


7. אסטרטגיות מיקום ל-Android
אם תסמנו ותבקשו הרשאות מיקום בדרכים שמוצגות ב-codelab הזה, האפליקציה שלכם תוכל לעקוב אחרי רמת הגישה שלה למיקום המכשיר.
בדף הזה מפורטות כמה שיטות מומלצות חשובות שקשורות להרשאות גישה למיקום. למידע נוסף על שמירה על בטיחות נתוני המשתמשים, אפשר לעיין במאמר בנושא שיטות מומלצות להרשאות שניתנות לאפליקציה.
בקשו רק את ההרשאות שאתם צריכים
בקשו הרשאות רק כשצריך. לדוגמה:
- אל תבקשו הרשאת מיקום בהפעלת האפליקציה, אלא אם זה הכרחי.
- אם האפליקציה מטרגטת ל-Android 10 ואילך ויש לה שירות שפועל בחזית, צריך להצהיר על
foregroundServiceTypeמסוג"location"במניפסט. - אל תבקשו הרשאות גישה למיקום ברקע אלא אם יש לכם תרחיש שימוש תקף כפי שמתואר במאמר גישה בטוחה ושקופה יותר למיקום המשתמש.
תמיכה בהפחתה חיננית (graceful degradation) אם ההרשאה לא ניתנת
כדי לשמור על חוויית משתמש טובה, צריך לתכנן את האפליקציה כך שהיא תוכל להתמודד בצורה חלקה עם המצבים הבאים:
- לאפליקציה אין גישה לפרטי המיקום.
- לאפליקציה שלך אין גישה לפרטי המיקום כשהיא פועלת ברקע.
8. מזל טוב
למדתם איך לקבל עדכוני מיקום ב-Android, תוך הקפדה על שיטות מומלצות.
מידע נוסף
- דוגמה מלאה לשימוש במיקום ברקע אם יש לכם תרחיש שימוש תקף
- איך מבקשים עדכוני מיקום