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

React Native Thermal Printer已配对蓝牙打印机无法连接打印求助

解决react-native-thermal-printer在Android11/12已配对蓝牙打印机无法连接的问题

可能原因

  • Android 11(API 30)及以上版本对蓝牙权限做了细分,已配对设备的连接需要BLUETOOTH_CONNECT权限,旧版本库可能未适配该权限逻辑。
  • 直接调用printBluetooth时,库未正确处理已配对设备的连接状态(如残留连接未释放)。
  • 2.3.6版本的库存在适配Android11+蓝牙API的Bug。

解决方案

1. 配置并动态申请蓝牙权限

在android/app/src/main/AndroidManifest.xml中添加权限声明:

<!-- 适配Android 10及以下 -->
<uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" />
<!-- Android 11+ 所需权限 -->
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation" />

在React Native代码中动态申请BLUETOOTH_CONNECT权限(调用打印前执行):

import { PermissionsAndroid, Platform } from 'react-native';

const requestBluetoothConnectPermission = async () => {
  if (Platform.OS !== 'android') return true;
  
  const apiLevel = Platform.Version;
  if (apiLevel >= 30) {
    const result = await PermissionsAndroid.request(
      PermissionsAndroid.PERMISSIONS.BLUETOOTH_CONNECT,
      {
        title: "蓝牙连接权限申请",
        message: "应用需要蓝牙连接权限以访问已配对的打印机",
        buttonPositive: "允许",
        buttonNegative: "取消"
      }
    );
    return result === PermissionsAndroid.RESULTS.GRANTED;
  }
  return true;
};

2. 显式管理蓝牙连接状态

替代直接调用printBluetooth,改为先连接、打印、再断开的流程:

// 先申请权限
const hasPermission = await requestBluetoothConnectPermission();
if (!hasPermission) {
  console.error("蓝牙连接权限未获取");
  return;
}

try {
  // 显式连接打印机
  await ThermalPrinterModule.connectBluetooth(macAddress);
  // 执行打印
  await ThermalPrinterModule.printBluetooth({
    macAddress: macAddress,
    payload: `[L]<font size='small'>amount:</font>\n`,
    autoCut: true,
  });
  // 打印完成后断开连接
  await ThermalPrinterModule.disconnectBluetooth();
} catch (error) {
  console.error("打印失败:", error);
  // 异常时尝试断开连接
  try {
    await ThermalPrinterModule.disconnectBluetooth();
  } catch (disconnectError) {
    console.error("断开连接失败:", disconnectError);
  }
}

3. 升级库版本

检查react-native-thermal-printer的最新稳定版,2.3.6版本可能存在Android11+适配缺陷,升级后大概率能解决权限和连接逻辑的问题。

4. 验证打印机状态

  • 进入系统蓝牙设置页面,确认目标打印机处于已配对且可用状态,无连接异常提示。
  • 尝试取消配对后重新配对,排除配对信息损坏导致的连接失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 11:27:20