react-native-ble-plx扫描不到BLE设备且扫描回调不执行是什么原因
react-native-ble-plx扫描不到设备问题排查方案
1. 首先排查基础权限与配置
- Android端:
- 安卓12及以上必须在AndroidManifest.xml中声明
BLUETOOTH_SCAN、BLUETOOTH_CONNECT、ACCESS_FINE_LOCATION权限,同时要在代码中动态申请这些权限,仅静态声明不生效 - 必须确认设备的蓝牙、定位服务均已开启,react-native-ble-plx不会自动触发系统开启上述服务,未开启时扫描会静默失败
- 安卓12及以上必须在AndroidManifest.xml中声明
- iOS端:
- 必须在Info.plist中添加
NSBluetoothAlwaysUsageDescription、NSBluetoothPeripheralUsageDescription的权限使用说明,未添加的话扫描功能会被系统拦截 - 如果是后台扫描场景还需要额外开启蓝牙后台模式,前台扫描仅需配置权限描述即可
- 必须在Info.plist中添加
2. 排查扫描代码逻辑问题
你当前直接调用startDeviceScan的写法存在时序问题:react-native-ble-plx的manager实例初始化后,需要等待蓝牙状态变为PoweredOn后再启动扫描,否则扫描会静默失败,不会触发任何回调。
绝大多数扫描无回调的问题都和时序有关,蓝牙模块初始化需要一定时间,启动扫描的时机过早会直接失效
你可以参考如下代码调整扫描逻辑:
// 先监听蓝牙状态变化 manager.onStateChange((state) => { if (state === 'PoweredOn') { // 蓝牙状态正常后再启动扫描 manager.startDeviceScan(null, null, (error, device) => { console.log("inside startdevice scan") }) } }, true)
另外要确认你没有在调用startDeviceScan后立刻执行stopDeviceScan,扫描被提前终止也不会触发回调。
3. 设备兼容性排查
react-native-ble-plx仅支持扫描*低功耗蓝牙(BLE)*设备,如果你使用的三星ITFIT无线耳机仅支持经典蓝牙(BR/EDR),就会出现扫描不到的情况。
你可以先通过第三方BLE调试工具扫描该耳机验证:
- 若第三方工具也无法扫描到:说明该耳机不支持BLE,属于设备兼容性问题,需要更换支持BLE的测试设备验证
- 若第三方工具可以扫描到:排除兼容性问题,回到前两步重新排查配置与代码逻辑
内容的提问来源于stack exchange,提问作者THEDUMBHEAD
相关产品推荐
相关产品推荐

