在Android中,進行藍牙設備掃描startDiscovery需要申請位置權限,但有的時候并不需要申請位置權限,就有了android:usesPermissionFlags="neverForLocation",設置這個就不用申請位置權限來進行藍牙掃描。
android:usesPermissionFlags="neverForLocation"
是 Android 中用于在應用的 AndroidManifest.xml
文件中聲明權限使用標志的一個屬性。具體來說,這個標志與藍牙掃描相關聯,旨在向用戶和系統表明應用程序請求藍牙權限的目的不是為了進行位置跟蹤或獲取用戶的位置信息。
背景
自 Android 12(API 級別 31)起,Google 引入了更嚴格的隱私保護措施,其中包括對藍牙掃描權限的管理。以前,應用程序可能只需要藍牙權限就能訪問藍牙功能,但這些功能也可能被間接用于推斷用戶的位置,例如通過藍牙信標進行室內定位。為增強用戶隱私保護,Android 提供了一種機制讓開發者明確聲明他們的藍牙掃描活動不會用于位置跟蹤。
使用場景
當你開發的應用程序需要執行藍牙掃描操作,但不打算用此操作來確定用戶的位置時,可以使用 android:usesPermissionFlags="neverForLocation"
來聲明這一點。這有助于增加用戶的信任度,并可能簡化權限請求流程,因為在這種情況下,應用不需要請求位置相關的權限。
如何使用
要在你的應用中聲明藍牙權限且不用于位置跟蹤,可以在 AndroidManifest.xml
文件中的 <uses-permission>
標簽內添加 android:usesPermissionFlags
屬性。例如:
xml
深色版本
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.bluetoothapp"><uses-permission android:name="android.permission.BLUETOOTH_SCAN"android:usesPermissionFlags="neverForLocation"/><!-- 其他配置 -->
</manifest>
在這個例子中,BLUETOOTH_SCAN
權限被聲明為“永不用于位置”,這意味著該應用承諾不會利用藍牙掃描的結果來進行位置跟蹤。
注意事項
- 權限請求:即使指定了?
neverForLocation
?標志,如果您的應用還需要其他涉及位置數據的功能,則仍需請求相應的位置權限。 - 用戶體驗:明確聲明藍牙權限不用于位置跟蹤可以幫助提高用戶的信任感,因為它清楚地傳達了應用收集數據的目的。
- 兼容性:
android:usesPermissionFlags="neverForLocation"
?只適用于 Android 12 及以上版本。對于較低版本的 Android 系統,您需要確保應用的行為符合當時的權限模型要求。
總結
android:usesPermissionFlags="neverForLocation"
是一個重要的隱私保護特性,允許開發者更加透明地向用戶展示他們如何使用藍牙權限。這對于那些確實不需要位置信息的應用程序來說是一個很好的工具,可以幫助減少不必要的權限請求,并提升用戶對應用的信任度。然而,開發者應確保遵守這一聲明的實際含義,在應用邏輯中避免使用藍牙掃描結果進行任何形式的位置跟蹤。
參考:
【android bluetooth 協議分析 03】【藍牙掃描詳解 2】【app觸發藍牙掃描后,協議棧都做了那些事情】_android 經典藍牙掃描流程源碼分析-CSDN博客
《Android學習筆記》Android12藍牙掃描不到設備的權限問題_android:usespermissionflags="neverforlocation-CSDN博客