wx.createBLEConnection(Object object)
基础库 1.1.0 开始支持,低版本需做兼容处理。
连接低功耗蓝牙设备。
若小程序在之前已有搜索过某个蓝牙设备,并成功建立连接,可直接传入之前搜索获取的 deviceId 直接尝试连接该设备,无需进行搜索操作。
参数
Object object
属性 | 类型 | 默认值 | 必填 | 说明 |
deviceId | string | | 是 | 用于区分设备的 id |
timeout | number | | 否 | 超时时间,单位ms,不填表示不会超时 |
success | function | | 否 | 接口调用成功的回调函数 |
fail | function | | 否 | 接口调用失败的回调函数 |
complete | function | | 否 | 接口调用结束的回调函数(调用成功、失败都会执行) |
注意
- 请保证尽量成对的调用
createBLEConnection
和closeBLEConnection
接口。安卓如果多次调用createBLEConnection
创建连接,有可能导致系统持有同一设备多个连接的实例,导致调用closeBLEConnection
的时候并不能真正的断开与设备的连接。 - 蓝牙连接随时可能断开,建议监听 wx.onBLEConnectionStateChange 回调事件,当蓝牙设备断开时按需执行重连操作
- 若对未连接的设备或已断开连接的设备调用数据读写操作的接口,会返回 10006 错误,建议进行重连操作。
lanyatest.wxml代码:
<!--pages/lanyatest/lanyatest.wxml-->
<view class="contentview">
<view class='myview' >
{{info}}
</view>
<button type="primary" class="button" bindtap="lanyatest1">1初始化蓝牙</button>
<button type="primary" class="button" bindtap="lanyatest2">2获取蓝牙状态</button>
<button type="primary" class="button" bindtap="lanyatest3">3搜索周边设备</button>
<button type="primary" class="button" bindtap="lanyatest4">4获取所有设备</button>
<block wx:for="{{devices}}" wx:key="{{test}}">
<button type="primary" class="button" id="{{item.deviceId}}" style='background-color:red' bindtap="lanyaconnect">5连接{{item.name}}
</button>
</block>
</view>
lanyatest.js代码:
// pages/lanyatest/lanyatest.js
Page({
/**
* 页面的初始数据
*/
data: {
info:"未初始化蓝牙适配器",
connectedDeviceId:""
},
lanyatest1(event){
var that = this;
wx.openBluetoothAdapter({
success: function (res) {
console.log('初始化蓝牙适配器成功')
//页面日志显示
that.setData({
info: '初始化蓝牙适配器成功'
})
},
fail: function (res) {
console.log('请打开蓝牙和定位功能')
that.setData({
info: '请打开蓝牙和定位功能'
})
}
})
},
lanyatest2(event){
var that = this;
wx.getBluetoothAdapterState({
success: function (res) {
//打印相关信息
console.log(JSON.stringify(res.errMsg) + "\n蓝牙是否可用:" + res.available);
that.setData({
info: JSON.stringify(res.errMsg) +"\n蓝牙是否可用:" + res.available
})
},
fail: function (res) {
//打印相关信息
console.log(JSON.stringify(res.errMsg) + "\n蓝牙是否可用:" + res.available);
that.setData({
info: JSON.stringify(res.errMsg) + "\n蓝牙是否可用:" + res.available
})
}
})
},
lanyatest3(event){
var that = this;
wx.startBluetoothDevicesDiscovery({
services: ['FEE7'], //如果填写了此UUID,那么只会搜索出含有这个UUID的设备,建议一开始先不填写或者注释掉这一句
success: function (res) {
that.setData({
info: "搜索设备" + JSON.stringify(res),
})
console.log('搜索设备返回' + JSON.stringify(res))
}
})
},
lanyatest4(event){
var that = this;
wx.getBluetoothDevices({
success: function (res) {
that.setData({
info: "设备列表\n" + JSON.stringify(res.devices),
devices: res.devices
})
console.log('搜设备数目:' + res.devices.length)
console.log('设备信息:\n' + JSON.stringify(res.devices)+"\n")
}
})
},
lanyaconnect(event){
var that = this;
wx.createBLEConnection({
deviceId: event.currentTarget.id,
success: function (res) {
console.log('调试信息:' + res.errMsg);
that.setData({
connectedDeviceId: event.currentTarget.id,
info: "MAC地址:" + event.currentTarget.id + ' 调试信息:' + res.errMsg,
})
},
fail: function () {
console.log("连接失败");
},
})
}
//我删除了自动生成的生命周期函数
})
lanyatest.wxss代码:
/* pages/lanyatest/lanyatest.wxss */
.vertical{
display: flex;
flex-direction: column;
}
/**index.wxss**/
.horizontal{
display: flex;
flex-direction: row;
}
.btinfo{
height:100px;
}
.contentview {
margin: 0 10px;
}
.button {
margin: 5px;
}
.myview{
height:200px;
word-break:break-all;/* 自动换行 */
}
真机调试结果: