You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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字段下添加:
    "NSBluetoothAlwaysUsageDescription": "需要蓝牙权限扫描周边BLE设备",
    "NSBluetoothPeripheralUsageDescription": "需要蓝牙权限连接BLE设备"
    
    Android端在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 20:24:03