bluetoothLeScanner.startScan(scanCallback);
  • 在 Android 开发中,调用上述方法,扫描不到设备
问题原因
  • 可能是蓝牙未开启或缺少权限
处理策略
  1. 检查设备蓝牙是否实际已开启,可调用 bluetoothAdapter.isEnabled() 验证

  2. 检查权限声明,需要如下权限,不需要动态申请

<uses-permission android:name="android.permission.BLUETOOTH" />

<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
  1. Android 6.0 开始,还需要位置权限,需要动态申请
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
  1. Android 12+ 开始,需要还如下新增权限,需要动态申请
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />

<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />

<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
  1. Android 12+ 开始,如果在 <uses-permission> 标签中明确声明 android:usesPermissionFlags="neverForLocation,那么可以不需要位置权限
<uses-permission
    android:name="android.permission.BLUETOOTH_SCAN"
    android:usesPermissionFlags="neverForLocation" />

更多推荐