uni-app蓝牙接口为何只能发送2进制数据,很多场景需发送16进制数据,能否实现?

uni-app蓝牙接口为何只能发送2进制数据,很多场景需发送16进制数据,能否实现?

最近有个需求,需要在手机上通过蓝牙给接收方发送16进制数据,但是看了一下uniapp的蓝牙接口只能发送ArrayBuffer二进制数据,如果发送16进制字符串就报错10019,官方文档上都没这个报错解释。想请教各路大神有没有办法用蓝牙发送16进制数据。

2 回复

可以做 专业插件开发 q 1196097915 主页 https://ask.dcloud.net.cn/question/91948

更多关于uni-app蓝牙接口为何只能发送2进制数据,很多场景需发送16进制数据,能否实现?的实战教程也可以访问 https://www.itying.com/category-93-b0.html


在uni-app中,蓝牙接口确实通常要求发送二进制数据,这是因为蓝牙协议本身在数据传输时,倾向于以字节流的形式进行。然而,在实际应用中,我们经常需要发送十六进制数据。实际上,通过一些转换和处理,我们完全可以在uni-app中实现发送十六进制数据的需求。

以下是一个简单的示例,展示了如何在uni-app中将十六进制数据转换为二进制数据,并通过蓝牙接口发送:

// 假设我们有一个十六进制字符串需要发送
let hexData = "123456789ABCDEF"; // 示例十六进制数据

// 将十六进制字符串转换为ArrayBuffer(二进制数据)
function hexToArrayBuffer(hex) {
    if (hex.length % 2 !== 0) {
        throw new Error("Invalid hex string");
    }
    let bytes = [];
    for (let i = 0; i < hex.length; i += 2) {
        bytes.push(parseInt(hex.substr(i, 2), 16));
    }
    return new Uint8Array(bytes).buffer;
}

// 转换后的二进制数据
let binaryData = hexToArrayBuffer(hexData);

// 假设我们已经成功连接到蓝牙设备,并且获得了bluetoothDevice对象
// let bluetoothDevice = ...; // 获取到的蓝牙设备对象

// 在uni-app中,发送蓝牙数据的API通常是这样的(以uni.writeBLECharacteristicValue为例)
// 注意:这里的serviceId和characteristicId需要根据实际情况替换
let serviceId = '0000fff0-0000-1000-8000-00805f9b34fb'; // 示例服务ID
let characteristicId = '0000fff1-0000-1000-8000-00805f9b34fb'; // 示例特征值ID

uni.writeBLECharacteristicValue({
    deviceId: bluetoothDevice.deviceId, // 设备ID
    serviceId: serviceId, // 服务ID
    characteristicId: characteristicId, // 特征值ID
    value: binaryData, // 要发送的二进制数据
    success: function (res) {
        console.log('数据发送成功', res);
    },
    fail: function (err) {
        console.error('数据发送失败', err);
    }
});

在这个示例中,我们首先定义了一个十六进制字符串hexData,然后通过hexToArrayBuffer函数将其转换为ArrayBuffer对象,这个对象包含了我们需要发送的二进制数据。最后,我们使用uni-app提供的uni.writeBLECharacteristicValue接口,将转换后的二进制数据发送给已经连接的蓝牙设备。

这样,我们就可以在uni-app中实现发送十六进制数据的需求了。需要注意的是,这里的serviceIdcharacteristicId需要根据你实际使用的蓝牙设备和服务的UUID进行替换。

回到顶部