接上一篇(原生微信小程序蓝牙开发(二))
上篇文章说到,当连接成功蓝牙设备后,第二次可以直接拿到蓝牙的设备id来直接连接,所以可以忽略这一步,这一步是第一次连接或者连接新设备的时候调用。
第三步:获取设备(wx.getBluetoothDevices)
获取在蓝牙模块生效期间所有搜索到的蓝牙设备。包括已经和本机处于连接状态的设备。
参数
Object object
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
success | function | 否 | 接口调用成功的回调函数 | |
fail | function | 否 | 接口调用失败的回调函数 | |
complete | function | 否 | 接口调用结束的回调函数(调用成功、失败都会执行) |
object.success 回调函数
参数
Object res
属性 | 类型 | 说明 |
---|---|---|
devices | Array.<Object> | Array.<Object> |
devices的结构属性:
结构属性 | 类型 | 说明 |
---|---|---|
name | string | 蓝牙设备名称,某些设备可能没有 |
deviceId | string | 蓝牙设备 id |
RSSI | number | 当前蓝牙设备的信号强度,单位 dBm |
advertisData | ArrayBuffer | 当前蓝牙设备的广播数据段中的 ManufacturerData 数据段 |
advertisServiceUUIDs | Array.<string> | 当前蓝牙设备的广播数据段中的 ServiceUUIDs 数据段 |
localName | string | 当前蓝牙设备的广播数据段中的 LocalName 数据段 |
serviceData | Object | 当前蓝牙设备的广播数据段中的 ServiceData 数据段 |
connectable | boolean | 当前蓝牙设备是否可连接( Android 8.0 以下不支持返回该值 ) |
官方文档:wx.getBluetoothDevices(Object object)
下面直接上我的代码:
// 获取设备
getBlue() {
const that = this;
wx.getBluetoothDevices({
success: (res) => {
wx.hideLoading();
// 如果搜索到设备列表为空的话
if (res.devices.length == 0) {
// 监听搜索到新设备
wx.onBluetoothDeviceFound((bres) => {
for (var i = 0; i < bres.devices.length; i++) {
let device = bres.devices[i];
if (device.name != "" && device.localName != "") {
// console.log("搜索到的设备:", device);
if (device.name == "你需要自动连接的设备名字" || device.localName == "你需要自动连接的设备名字") {
that.setData({
"setInfo.getBlue": "获取设备成功",
});
that.connetBlue(device.deviceId, device.name);
return;
} else {
setTimeout(() => {
if (that.data.setInfo.connetBlue != "连接设备成功") {
wx.showToast({
title: "未找到设备",
icon: "error",
});
that.setData({
"setInfo.getBlue": "获取设备失败",
});
}
}, 2000);
}
}
}
});
return;
} else {
// console.log("进else");
}
},
fail: () => {
wx.showToast({
title: "搜索设备失败",
icon: "error",
});
},
});
},
注意:
- 这一步也许会搜索到很多设备名为空的蓝牙,所以需要做一个过滤处理
- 其中 wx.onBluetoothDeviceFound 为监听搜索到新设备的事件
- 该接口获取到的设备列表为蓝牙模块生效期间所有搜索到的蓝牙设备,若在蓝牙模块使用流程结束后未及时调用 wx.closeBluetoothAdapter 释放资源,会存在调用该接口会返回之前的蓝牙使用流程中搜索到的蓝牙设备,可能设备已经不在用户身边,无法连接。