返回

React Native 蓝牙设备连接:常见问题诊断与解决方案

Android

React Native 蓝牙设备连接故障排查指南

简介

蓝牙作为一种无线通信技术,使设备能够在短距离内交换数据。但是,在使用 react-native-ble-plx 库时,设备连接可能会出现问题。本指南将分步解决这些问题,帮助你建立稳定的蓝牙连接。

准备阶段

1.1 库安装

使用命令 npm install react-native-ble-plx --save 安装库。

1.2 Android 清单配置

AndroidManifest.xml 文件中添加以下权限:

<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-feature android:name="android.hardware.bluetooth_le" android:required="true" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />

1.3 iOS Info.plist 配置

Info.plist 文件中添加以下键值对:

<key>NSBluetoothAlwaysUsageDescription</key>
<string>App needs bluetooth access to connect to nearby devices.</string>
<key>NSBluetoothPeripheralUsageDescription</key>
<string>App needs bluetooth access to connect to nearby devices.</string>

查找设备

const manager = new BleManager();
const subscription = manager.startDeviceScan(null, null, (error, device) => {
  if (error) {
    console.error({ error });
    return;
  }
  // 处理设备
});

return () => {
  manager.stopDeviceScan();
  subscription.remove();
};

连接设备

const connectToDevice = async (deviceId) => {
  try {
    const res = await manager.connectToDevice(deviceId, { autoConnect: true });
    console.log(`Connected to device: ${deviceId}`);
    console.warn({ res });
    // 处理蓝牙通信逻辑
  } catch (error) {
    console.error(`Error connecting to device: ${deviceId}`, error);
  }
};

检查连接

const checkConnection = async (dev_id) => {
  const isConnected = await manager.isDeviceConnected(dev_id);
  console.warn({ isConnected });
  // 返回连接状态
};

常见问题解答

Android 设备无法连接

  • 授予应用程序蓝牙权限。
  • 启用设备蓝牙并设为可发现模式。
  • 重启设备和应用程序。

iOS 设备无法扫描

  • 授予应用程序蓝牙权限。
  • 启用设备蓝牙并设为可发现模式。
  • 确保应用程序有权访问本地网络。

结论

遵循上述步骤,你可以使用 react-native-ble-plx 库连接蓝牙设备。记住,具体实现可能根据应用程序的特定需求而异。如有疑问,请参考提供的常见问题解答。