uni-app uni.createBLEConnection(OBJECT) 连接蓝牙打印机配对不成功

发布于 1周前 作者 vueper 来自 Uni-App

uni-app uni.createBLEConnection(OBJECT) 连接蓝牙打印机配对不成功

操作步骤:

  • 全部使用uni 提供的低功耗蓝牙接口。从openBluetoothAdapter,到搜索设备。然后连接。

预期结果:

  • 配对成功,

实际结果:

  • 提示配对失败

bug描述:

  • 每次掉调uni.createBLEConnection(OBJECT) 都会要求配对,输入设备提供的配对码都会提示密码不对,但是通过系统设置配对可以成功。
  • 权限都申请了。运行时权限也调了。
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.BLUETOOTH"/>
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
    <uses-permission android:name="android.permission.BLUETOOTH_CONNECT"/>
    <uses-permission android:name="android.permission.BLUETOOTH_SCAN"/>
    
信息类别 信息内容
产品分类 uniapp/App
PC开发环境 Windows
PC操作系统版本 11
HBuilderX类型 正式
HBuilderX版本 4.36
手机系统 Android
手机系统版本 Android 12
手机厂商 华为
手机机型 metapad 11
页面类型 vue
Vue版本 vue3
打包方式 云端
项目创建方式 HBuilderX

2 回复

BLE蓝牙pin码是6位,001234 可以正常配对


在处理 uni-app 中使用 uni.createBLEConnection 方法连接蓝牙打印机配对不成功的问题时,首先需要确保几个关键点:设备的蓝牙地址正确、设备已被发现并且处于可连接状态、应用拥有必要的蓝牙权限。以下是一个基本的代码示例,展示了如何使用 uni.createBLEConnection 方法连接蓝牙设备,并附带了一些调试和错误处理的代码片段。

// 假设已经通过 uni.startBluetoothDevicesDiscovery 获取到了蓝牙设备的列表
let deviceId = 'XX:XX:XX:XX:XX:XX'; // 替换为实际的蓝牙设备ID

uni.createBLEConnection({
    deviceId: deviceId,
    success(res) {
        console.log('连接成功', res);
        // 连接成功后,可以调用 uni.getBLEDeviceServices 获取服务
        uni.getBLEDeviceServices({
            deviceId: deviceId,
            success(serviceRes) {
                console.log('获取服务成功', serviceRes);
                // 根据获取到的服务UUID,进一步调用 uni.getBLEDeviceCharacteristics 获取特征值
                let serviceId = serviceRes.services[0].uuid; // 假设使用第一个服务
                uni.getBLEDeviceCharacteristics({
                    deviceId: deviceId,
                    serviceId: serviceId,
                    success(characteristicRes) {
                        console.log('获取特征值成功', characteristicRes);
                        // 在这里可以保存特征值UUID,用于后续的数据读写
                    },
                    fail(err) {
                        console.error('获取特征值失败', err);
                    }
                });
            },
            fail(err) {
                console.error('获取服务失败', err);
            }
        });
    },
    fail(err) {
        console.error('连接失败', err);
        // 处理连接失败的情况,可能是设备不支持BLE,或者设备已经连接了其他设备
        // 可以尝试重新扫描设备或者提示用户检查设备状态
    }
});

// 错误处理与重试机制(可选)
function connectToDevice(deviceId, attempts = 3) {
    if (attempts <= 0) {
        console.error('连接尝试次数过多,放弃连接');
        return;
    }
    uni.createBLEConnection({
        deviceId: deviceId,
        success: () => {
            console.log('成功连接设备,不再重试');
        },
        fail: (err) => {
            console.warn(`连接尝试失败,剩余尝试次数: ${attempts - 1}`, err);
            setTimeout(() => connectToDevice(deviceId, attempts - 1), 2000); // 等待2秒后重试
        }
    });
}

// 调用连接函数
connectToDevice(deviceId);

上述代码展示了基本的蓝牙连接流程,包括错误处理和简单的重试机制。如果配对不成功,可能的原因包括设备不支持当前操作、蓝牙权限未授予、设备已连接其他设备等。在实际应用中,应增加更多的错误处理和用户提示逻辑,以提升用户体验。

回到顶部