You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

React Native蓝牙打印机打印方法及连接失败问题求助

在React Native中解决蓝牙打印机连接问题(基于react-native-bluetooth-escpos-printer)

我之前在项目里用这个库连接蓝牙打印机的时候也踩过不少坑,连接失败的情况大多是权限、配对或者代码细节没做好,给你整理几个关键的排查和解决步骤:

1. 先把权限配置做全

蓝牙权限是连接失败的重灾区,安卓和iOS的要求不一样,一定要配置到位:

安卓端(AndroidManifest.xml)

添加这些权限到你的清单文件里:

<!-- 基础蓝牙控制权限 -->
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<!-- 安卓6.0+扫描蓝牙需要位置权限 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- 安卓12+新增的扫描/连接权限 -->
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<!-- 声明设备支持蓝牙(可选) -->
<uses-feature android:name="android.hardware.bluetooth" android:required="false" />

iOS端(Info.plist)

添加蓝牙权限描述:

<key>NSBluetoothAlwaysUsageDescription</key>
<string>需要蓝牙权限连接打印机</string>
<key>NSBluetoothPeripheralUsageDescription</key>
<string>需要蓝牙权限连接打印机</string>

2. 确保设备已配对且处于可连接状态

  • 先在手机系统设置里手动配对蓝牙打印机,这个库不会自动处理配对流程,必须先完成系统级配对
  • 确认打印机处于可发现模式(通常是长按配对/电源键直到指示灯闪烁)
  • 检查打印机的蓝牙名称和你代码中要匹配的名称是否一致,避免拼写错误

3. 检查连接代码的正确写法

很多人连接失败是因为用错了设备标识符,一定要用设备的address(蓝牙地址)而不是name来连接,给你一个完整的示例:

import BluetoothEscposPrinter from 'react-native-bluetooth-escpos-printer';

const connectAndPrint = async () => {
  try {
    // 第一步:检查蓝牙是否开启,未开启则请求开启
    const isBluetoothEnabled = await BluetoothEscposPrinter.isBluetoothEnabled();
    if (!isBluetoothEnabled) {
      await BluetoothEscposPrinter.enableBluetooth();
    }

    // 第二步:获取已配对的设备(比扫描更可靠)
    const bondedDevices = await BluetoothEscposPrinter.getBondedDevices();
    console.log('已配对设备:', bondedDevices);

    // 第三步:找到目标打印机(这里假设名称包含"Printer")
    const targetPrinter = bondedDevices.find(device => device.name.includes('Printer'));
    if (!targetPrinter) {
      console.error('未找到已配对的目标打印机,请先在系统设置配对');
      return;
    }

    // 第四步:尝试连接
    const isConnected = await BluetoothEscposPrinter.connect(targetPrinter.address);
    if (isConnected) {
      console.log('连接成功!开始测试打印');
      // 测试打印文本
      await BluetoothEscposPrinter.printText('测试打印内容\n');
      await BluetoothEscposPrinter.printText('------------------------\n');
      await BluetoothEscposPrinter.printText('打印完成!\n');
      // 切纸(如果打印机支持)
      await BluetoothEscposPrinter.cut();
    } else {
      console.error('连接失败,请检查打印机是否处于开机状态');
    }
  } catch (error) {
    console.error('蓝牙操作出错:', error.message);
  }
};

4. 实用调试技巧

  • BluetoothEscposPrinter.getBondedDevices()替代扫描,直接获取已配对设备,避免扫描权限问题
  • 安卓端用adb logcat查看详细日志,iOS端用Xcode控制台,重点看是否有权限拒绝、连接超时的错误信息
  • 测试其他蓝牙设备(比如蓝牙耳机)是否能正常连接,排除手机蓝牙硬件问题
  • 安卓10+用户要确保应用已经获取了位置权限,旧版本蓝牙扫描依赖位置权限

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

火山引擎 最新活动