android - 需要在 Android 10.0 上为蓝牙低功耗扫描启用位置信息
问题描述
将我的 Pixel XL 升级到 Android 版本 10.0 后,蓝牙低功耗 (BLE) 扫描只有在我打开位置功能后才能工作。
直到现在,这还不是问题,它可以在运行 Android 9.0、8.0 和 6.0.1 的多台设备上运行。
我的应用程序仅使用在前台扫描BluetoothLeScanner
startScan(List<ScanFilter> filters, ScanSettings settings, ScanCallback callback)
我的应用程序具有 FINE_LOCATION、COARSE_LOCATION 和 BLUETOOTH 权限,我尝试添加 ACCESS_BACKGROUND_LOCATION 权限但没有运气。
Android 10.0 中是否对应用程序扫描蓝牙设备有更严格的要求,我找不到任何关于此的信息,希望我不必要求用户打开位置来让我的应用程序工作。
解决方案
从 Android 10 开始,现在需要打开 ACCESS_FINE_LOCATION 才能执行蓝牙操作。这样做的原因是蓝牙可用于收集有关用户位置的信息(例如使用 BLE 信标),因此应声明相关的应用权限。
对于 Android 9 及更低版本,ACCESS_COARSE_LOCATION 就足够了,这可能就是您的应用正常运行的原因。
更多信息可以在这里找到:-
- https://developer.android.com/guide/topics/connectivity/bluetooth#Permissions
- 蓝牙 LE 扫描在后台无法在 Android M 上运行
我希望这有帮助。
推荐阅读
- c++ - 在非实例化模板中使用 static_assert 的正确方法是什么?
- json - 在 play scala 的单元测试中模拟 WsClient
- python - 我无法删除产品
- ios - iOS 订阅 latest_receipt_info
- visual-studio-code - VS Code 无法启动 Bash
- botframework - 创建访问器后无法写入机器人状态属性
- python - ValueError:不支持 ssd_inception_v3。有关与不同版本 TensorFlow 兼容的特征提取器,请参阅 `model_builder.py`
- javascript - 如何使用 v-for vuejs 指令获取元素 ID?
- jmeter - 根据请求为变量赋值
- android - 日历日添加未按预期工作