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
相关产品推荐
相关产品推荐

