首页 > 解决方案 > 缺少权限时未调用 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 应用程序,所以请相应地提出建议。

标签: androidbluetooth-lowenergyandroid-bluetoothandroid-bleandroid-ble-library

解决方案


有几件事可能是这样。首先请注意,对于 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 是否启用了权限。然后检查用户已允许该权限的应用程序(在手机上)。


推荐阅读