Expo React Native使用react-native-ble-plx创建BleManager报错如何解决?
问题原因
你使用的是默认的Expo Go环境运行项目,而react-native-ble-plx包含iOS/Android原生实现代码,Expo Go预置的原生模块库没有包含该依赖的原生部分,所以初始化BleManager时找不到底层原生模块,触发对应报错。
解决方案
方案1:使用Expo开发构建(Development Build)替代Expo Go
- 先安装expo-dev-client依赖:
npx expo install expo-dev-client - 在项目根目录的
app.json中添加蓝牙权限配置:
iOS端在ios.infoPlist字段下添加:
Android端在"NSBluetoothAlwaysUsageDescription": "需要蓝牙权限扫描周边BLE设备", "NSBluetoothPeripheralUsageDescription": "需要蓝牙权限连接BLE设备"android.permissions字段下添加:"android.permission.BLUETOOTH", "android.permission.BLUETOOTH_ADMIN", "android.permission.ACCESS_FINE_LOCATION", "android.permission.BLUETOOTH_SCAN", "android.permission.BLUETOOTH_CONNECT" - 为对应平台生成开发构建包:
安卓测试运行命令:eas build --profile development --platform android
iOS测试运行命令:eas build --profile development --platform ios - 构建完成后将生成的开发包安装到测试设备,使用
npx expo start --dev-client启动项目,即可正常初始化BleManager。
方案2:使用Expo官方适配的BLE库
如果不想走构建流程做临时测试,可以直接使用Expo官方封装的expo-bluetooth-le库,该库默认适配Expo环境,无需额外原生配置:
- 安装依赖:
npx expo install expo-bluetooth-le - 其API逻辑和
react-native-ble-plx高度相似,直接调用扫描接口即可获取BLE设备列表。
注意:不要在组件渲染阶段直接初始化BleManager,建议放在useEffect钩子中初始化,避免重复创建实例,参考代码如下:
import React, { useEffect } from 'react'; import { BleManager } from 'react-native-ble-plx'; const HelloWorldApp = () => { useEffect(() => { const manager = new BleManager(); // BLE扫描逻辑写在这里 return () => { // 页面卸载时销毁实例,避免内存泄漏 manager.destroy(); } }, []); // 后续页面渲染逻辑 }
内容的提问来源于stack exchange,提问作者elifnurafsar
相关产品推荐
相关产品推荐

