在Android 11之前,你都可以透過把自己App宣告成foreground service的方式達到不處於背景的狀態,自然也不需要宣告background location的權限來使用,一切都很美好
Android 11後
但在Android 11 後,google開始針對背景定位的app有了改變與限制,即使你的app 有宣告了foreground service,也不能再非前景的時候取得到定位位置了
https://developer.android.com/about/versions/oreo/background-location-limits#tuning-behavior
照上面所說,條件就是除非你有取得Background Location permission,而宣告又是另一回事,這邊先講講這個改變就好
需要得到Google Play商城審核背景定位權限
另外你會說那我就宣告背景權限不就好了,其實也沒這麼簡單,如果你是要送審到google play商城上面的話,你就必須先在商城上面要求這個權限的必要審核,如果google覺得你一個檔按總管的app要取得背景定位是不合理的,你就無法通過審核,自然你用了這個權限也就無法上架
因次你的背景定位必須非常合理,譬如你是一個導航功能的app,或是你是一個兒童安全的定位追蹤App等等
在應用程式中必須明確的說明會進行背景定位的行為
揭露事項的措辭「必須」包含以下要素:
- 「位置資訊」一詞
- 使用下列任一詞組指出應用程式會在背景使用位置資訊:「背景」/「應用程式關閉時」/「一律會使用」/「您未使用應用程式時」
- 列出會在背景使用位置資訊的所有功能
- 如果您將允許使用的範圍擴及廣告放送,則必須加上以下聲明:「用於提供廣告/支援廣告」(請選用最精確的措辭)。
必須在隱私權政策裡面也有寫明
在應用程式的商店資訊中加入隱私權政策,可協助使用者清楚瞭解您如何處理敏感的使用者資料和裝置資料。這份隱私權政策以及應用程式內的所有揭露事項,必須完整說明您的應用程式如何收集、使用及分享使用者資料,包括資料分享對象的類型。如要瞭解自己必須提供的資訊,請洽詢您的法律代表。
- 您必須在應用程式的商店資訊頁面和應用程式內部提供隱私權政策連結。
- 確認隱私權政策列載於有效網址的頁面、適用於您的應用程式,且涵蓋使用者隱私權的具體說明。
- 如果應用程式會在背景使用位置資訊,隱私權政策就必須包含適當的相關揭露事項。
- 請確認隱私權政策頁面已明確加上符合政策性質的標籤。
說明影片
必須附上30秒的說明影片,說明必要性
影響的API
Fused location Provider
If your app is running in the background, the location system service computes a new location for your app only a few times each hour. This is the case even when your app is requesting more frequent location updates.
如果在背景,原本設定好的取頻率會因為背景而變得一小時只能得到數次的更新
Location Manager
Location updates are provided to background apps only a few times each hour.
一樣location manager也會因為在背景而只能拿到數次的更新每小時.
Wi-fi manager
startScan的方法也是一樣一小時數次得到結果。
其他還有Geofencing / GNSS Measurements and GNSS Navigation Messages
如果我是一個導航軟體,我該怎麼做才能持續在背景取得定位呢 ?
宣告 Foreground service + 取得background location權限
需告忽略電池最佳化
android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
and ActionRequestIgnoreBatteryOptimizations
android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
https://stackoverflow.com/questions/63882930/keep-running-background-service-android
https://developer.android.com/training/location/background
Android 8 後的背景定位限制
https://developer.android.com/training/location/background#limit-updates
If background location access is essential for your app, keep in mind that Android preserves device battery life by setting background location limits on devices that run Android 8.0 (API level 26) and higher. On these versions of Android, if your app is running in the background, it can receive location updates only a few times each hour. Learn more about background location limits.
Android為了保持電池壽命,限制了Android8以上的背景定位功能。這些版本的Android 如果你的App是執行在背景,他可以接收到一個小時只有數次的定位而已。
以上來看,可能有一些背景運動 APP或是,導航軟體都會造成無法於背景進行定位取得位置使用,
Reference
https://support.google.com/googleplay/android-developer/answer/9799150?hl=zh-Hant#zippy=