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

React Native实现手机BLE主从双模及无网邻机自动数据互传方案咨询

React Native实现BLE双向广播接收系统的解决方案

针对你需要的**无需配对、无网络依赖、同时作为BLE外设(广播自身数据)和中心(接收周边设备数据)**的需求,以下是不切换到Flutter的可行方案:

一、使用支持BLE外设模式的React Native第三方库

目前有专门支持外设模式的React Native库,可直接替代Flutter的flutter_ble_peripheral:

1. react-native-ble-peripheral

这个库支持iOS和Android的BLE外设模式,能实现广播自定义数据、处理中心设备的连接请求。

  • 基本用法示例:
    • 安装:
      npm install react-native-ble-peripheral --save
      # 或者 yarn add react-native-ble-peripheral
      
    • 启动广播(包含自定义数据):
      import BlePeripheral from 'react-native-ble-peripheral';
      
      // 定义BLE服务和特征UUID
      const serviceUUID = 'YourCustomServiceUUID';
      const characteristicUUID = 'YourCustomCharUUID';
      
      // 启动广播,同时暴露服务供中心设备读取
      BlePeripheral.startAdvertising({
        localName: 'YourDeviceName',
        serviceUUIDs: [serviceUUID],
        manufacturerData: {
          companyId: 0xFFFF, // 自定义厂商ID
          data: Buffer.from('YourBroadcastData').toString('base64')
        }
      });
      
      // 设置特征值,供中心设备读取
      BlePeripheral.setCharacteristicValue(serviceUUID, characteristicUUID, Buffer.from('YourData').toString('base64'));
      
    • 同时,你可以继续使用react-native-ble-plx或react-native-ble-manager作为中心模式,扫描周边设备的广播数据,实现双向传输。

二、自行封装原生模块(如果现有库满足不了定制需求)

如果第三方库功能有限,你可以直接基于原生BLE API封装React Native桥接层:

Android端(基于BluetoothLeAdvertiser)

  1. 编写原生广播代码,实现启动/停止广播、发送数据:
    // 初始化Advertiser
    BluetoothLeAdvertiser advertiser = BluetoothAdapter.getDefaultAdapter().getBluetoothLeAdvertiser();
    AdvertiseSettings settings = new AdvertiseSettings.Builder()
            .setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_LOW_POWER)
            .setTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_LOW)
            .setConnectable(true)
            .build();
    AdvertiseData advertiseData = new AdvertiseData.Builder()
            .setIncludeDeviceName(true)
            .addServiceUuid(new ParcelUuid(UUID.fromString("YourServiceUUID")))
            .addManufacturerData(0xFFFF, "YourData".getBytes())
            .build();
    // 启动广播
    advertiser.startAdvertising(settings, advertiseData, advertiseCallback);
    
  2. 编写React Native桥接方法,让JS层可以调用这些原生功能。

iOS端(基于CBPeripheralManager)

  1. 初始化外设管理器并启动广播:
    import CoreBluetooth
    
    class BLEPeripheralManager: NSObject, CBPeripheralManagerDelegate {
        var peripheralManager: CBPeripheralManager!
    
        override init() {
            super.init()
            peripheralManager = CBPeripheralManager(delegate: self, queue: nil)
        }
    
        func startAdvertising() {
            let advertisementData = [
                CBAdvertisementDataLocalNameKey: "YourDeviceName",
                CBAdvertisementDataServiceUUIDsKey: [CBUUID(string: "YourServiceUUID")]
            ] as [String : Any]
            peripheralManager.startAdvertising(advertisementData)
        }
    
        func peripheralManagerDidUpdateState(_ peripheral: CBPeripheralManager) {
            if peripheral.state == .poweredOn {
                startAdvertising()
            }
        }
    }
    
  2. 同样编写桥接代码,让React Native可以调用。

三、组合方案实现双向传输

因为你的需求是同时广播和接收,可以采用:

  • 用react-native-ble-peripheral(或自定义原生模块)处理外设模式,广播自身数据并允许其他设备连接读取;
  • 用react-native-ble-plx处理中心模式,扫描周边设备的广播数据,连接外设设备读取其数据。

这种组合方式完全满足你“无需用户操作、无网络依赖、双向数据传输”的需求。

内容的提问来源于stack exchange,提问作者Akshat Kashyap

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 10:31:12