React Native BLE 开发实战:react-native-ble-plx 核心功能详解

React Native BLE 开发实战:react-native-ble-plx 核心功能详解

react-native-ble-plx React Native BLE library react-native-ble-plx 项目地址: https://gitcode.com/gh_mirrors/re/react-native-ble-plx

前言

在移动应用开发中,蓝牙低功耗(BLE)技术因其低功耗特性被广泛应用于物联网设备连接。react-native-ble-plx 是一个优秀的 React Native 蓝牙库,为开发者提供了强大的 BLE 功能支持。本文将深入解析该库的核心功能和使用方法,帮助开发者快速掌握 BLE 开发的关键技术。

设备连接状态监控

断开连接事件处理

在实际应用中,设备可能会因各种原因断开连接。react-native-ble-plx 提供了 onDeviceDisconnected 方法来监控设备断开事件,开发者可以基于此实现自定义的重连逻辑或用户提示。

const setupDeviceDisconnectMonitor = (targetDeviceId: string) => {
  bleManager.onDeviceDisconnected(targetDeviceId, handleDisconnection)
}

const handleDisconnection = (error: BleError | null, device: Device | null) => {
  if (error) {
    console.error('断开连接错误:', JSON.stringify(error, null, 2))
    return
  }
  
  if (device) {
    console.log('设备已断开:', device.id)
    // 自动重连逻辑
    device.connect().catch(err => {
      console.error('重连失败:', err)
    })
  }
}

重要说明:连接状态监控仅在应用处于前台时有效,iOS 和 Android 系统出于节能考虑会限制后台的蓝牙操作。

特征值读写操作

设备连接准备

建立 BLE 连接需要两个关键步骤:

  1. 物理层连接:device.connect()
  2. 服务发现:device.discoverAllServicesAndCharacteristics()
async function connectToDevice(device) {
  try {
    // 第一步:建立物理连接
    const connectedDevice = await device.connect()
    
    // 第二步:发现所有服务和特征
    const readyDevice = await connectedDevice.discoverAllServicesAndCharacteristics()
    
    // 现在可以进行读写操作
    return readyDevice
  } catch (error) {
    console.error('连接过程出错:', error)
    throw error
  }
}

特征值读取

读取特征值时,需要指定服务UUID和特征UUID:

async function readCharacteristic(device, serviceUUID, characteristicUUID) {
  try {
    const characteristic = await device.readCharacteristicForService(
      serviceUUID,
      characteristicUUID
    )
    console.log('读取到的值:', characteristic.value)
    return characteristic.value
  } catch (error) {
    console.error('读取特征值失败:', error)
    throw error
  }
}

特征值写入

写入操作有两种模式:

  1. 带响应写入:确保数据正确传输,等待设备确认
  2. 不带响应写入:快速发送但不保证送达
// 带响应写入(可靠)
async function writeWithResponse(device, serviceUUID, characteristicUUID, value) {
  try {
    await device.writeCharacteristicWithResponseForService(
      serviceUUID,
      characteristicUUID,
      value
    )
    console.log('写入成功')
  } catch (error) {
    console.error('写入失败:', error)
  }
}

// 不带响应写入(快速)
async function writeWithoutResponse(device, serviceUUID, characteristicUUID, value) {
  try {
    await device.writeCharacteristicWithoutResponseForService(
      serviceUUID,
      characteristicUUID,
      value
    )
    console.log('写入请求已发送')
  } catch (error) {
    console.error('写入失败:', error)
  }
}

已连接设备管理

获取系统已连接设备

当设备已与操作系统配对但未被当前应用连接时,可以使用以下方法获取并连接:

async function connectToSystemDevice(serviceUUIDs, targetDeviceId) {
  try {
    const devices = await bleManager.getConnectedDevices(serviceUUIDs)
    const targetDevice = devices.find(d => d.id === targetDeviceId)
    
    if (targetDevice && !targetDevice.isConnected) {
      await targetDevice.connect()
      console.log('已连接到系统设备')
    }
  } catch (error) {
    console.error('连接系统设备失败:', error)
  }
}

调试与日志收集

启用详细日志

在开发阶段,启用详细日志有助于排查问题:

import { LogLevel } from 'react-native-ble-plx'

// 设置日志级别为详细
bleManager.setLogLevel(LogLevel.Verbose)

平台特定日志收集

Android 日志

在 Android Studio 中使用 Logcat 查看日志,建议设置以下过滤器:

package:mine (tag:BluetoothGatt | tag:ReactNativeJS | RxBle)
iOS 日志

在 Xcode 中通过控制台查看实时日志输出。

最佳实践建议

  1. 连接管理:实现稳健的重连机制,处理各种断开场景
  2. 错误处理:对所有BLE操作添加适当的错误处理
  3. 资源释放:在组件卸载时取消所有订阅和监听
  4. 性能优化:避免频繁的读写操作,合理使用不带响应的写入
  5. 用户反馈:在关键操作(如连接、写入)时提供适当的用户反馈

通过掌握这些核心功能,开发者可以构建出稳定可靠的蓝牙应用,满足各种物联网场景的需求。react-native-ble-plx 的强大功能为 React Native 生态中的BLE开发提供了坚实基础。

react-native-ble-plx React Native BLE library react-native-ble-plx 项目地址: https://gitcode.com/gh_mirrors/re/react-native-ble-plx

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

潘俭渝Erik

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值