android - 缺少权限时未调用 BLE 扫描回调
问题描述
我正在使用三星 Note 8 (Android 9) 和三星 A50(Android 10)。
我正在进行 BLE 扫描,需要蓝牙和位置权限(Android >=23)。在开始 BLE 扫描之前,我没有向应用程序提供位置权限。
在 Note 8 上开始扫描时,当未授予位置权限时,我收到错误代码 2 (SCAN_FAILED_APPLICATION_REGISTRATION_FAILED) 的 onScanFailed() 回调。
在 A50 上开始扫描时,我没有收到任何回调。从 adb 日志中,我可以看到内部日志BluetoothUtils: Permission denial: Need ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATIONpermission to get scan results 07-28 21:03:35.720 2010 2650 D
我想确定由于缺少权限而发生扫描失败。我怎么做?
注意-我正在构建一个 Android 库,而不是一个 Android 应用程序,所以请相应地提出建议。
解决方案
有几件事可能是这样。首先请注意,对于 BLE 扫描,您需要获得位置和蓝牙权限。因此,在您的开发环境中,您需要指定这一点。例如,在 android studio 中,您需要进入清单并特别授予蓝牙和位置权限。见下文:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
但是,这还不够,因为在您的手机应用程序中,您需要获得用户的许可。
当您运行 android 时,您需要授予位置权限(并打开位置和蓝牙),然后扫描才能工作。
要允许位置,请转到:
- 设置
- 您的应用
- 查找您的应用
- 应用信息
- 权限
- 允许位置权限
总而言之,检查您的 IDE 是否启用了权限。然后检查用户已允许该权限的应用程序(在手机上)。
推荐阅读
- python - 没有名为“_tkinter”的模块
- mongodb - DEVOPS:Express 和 Mongo Docker 容器网络
- android - 多次调用 TextWatcher 方法
- oracle - 如何在excel中将csv文件转换为多张表
- javascript - 防止 Postgres 中的冲突更新
- javascript - 使用 toDataURL 编写从画布生成的 png,然后通过 NodeJS/Express 中的 XMLHttpRequest 发送
- azure - 从 API 管理服务调用 CosmosDB 的存储过程
- android - 如何在recyclerview中一次只显示一个列表项?
- vue.js - vuelidate 中集合验证的奇怪行为
- typescript - 如何创建一个“代理”对象的类?