Android 开发问题:bluetoothLeScanner.startScan(scanCallback); 扫描不到设备
bluetoothLeScanner.startScan(scanCallback);
- 在 Android 开发中,调用上述方法,扫描不到设备
问题原因
- 可能是蓝牙未开启或缺少权限
处理策略
-
检查设备蓝牙是否实际已开启,可调用
bluetoothAdapter.isEnabled()
验证 -
检查权限声明,需要如下权限,不需要动态申请
<uses-permission android:name="android.permission.BLUETOOTH" /><uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
- 从
Android 6.0
开始,还需要位置权限,需要动态申请
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
- 从
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" />
- 从
Android 12+
开始,如果在<uses-permission>
标签中明确声明android:usesPermissionFlags="neverForLocation
,那么可以不需要位置权限
<uses-permissionandroid:name="android.permission.BLUETOOTH_SCAN"android:usesPermissionFlags="neverForLocation" />