my.connectbledevice(object object)
支付宝客户端 10.0.18 或更高版本; 若版本较低,建议采取 兼容处理 。
支小宝客户端 支持
安诊儿客户端 支持
小程序开发者工具: 不支持。请使用真机调试
主体: 企业支付宝小程序 、 个人支付宝小程序
相关文档: 蓝牙 api 错误码对照表 、 蓝牙 api 概览
连接低功耗蓝牙设备。
object object
查看示例
属性 | 类型 | 默认值 | 必填 | 描述 |
---|---|---|---|---|
deviceid | string | - | 是 | 蓝牙设备 id |
success | function | - | 否 | 调用成功的回调函数 |
fail | function | - | 否 | 调用失败的回调函数 |
complete | function | - | 否 | 调用结束的回调函数(调用成功、失败都会执行) |
fail 回调的参数为 object,error
属性为错误码,errormessage
属性为错误消息。
错误码 | 错误消息 | 凯发app官方网站的解决方案 |
---|---|---|
2001 | 用户不允许授权。 |
用户拒绝为当前小程序授权。 |
2002 | 用户不允许授权 |
用户拒绝为当前小程序授权,并勾选了“总是保持以上选择”后,再次调用授权接口产生的报错。 |
2003 | 用户勾选了不允许授权选项。 |
用户拒绝为当前小程序授权,并勾选了“总是保持以上选择”。 |
完整的错误码信息请查看蓝牙 api 错误码对照表。
<view class="page">
<view class="page-description">蓝牙 apiview>
<view class="page-section">
<view class="page-section-title">本机蓝牙开关状态view>
<view class="page-section-demo">
<button type="primary" ontap="openbluetoothadapter">初始化蓝牙button>
<button type="primary" ontap="closebluetoothadapter">关闭本机蓝牙button>
<button type="primary" ontap="getbluetoothadapterstate">获取蓝牙状态button>
view>
<view class="page-section-title">扫描蓝牙设备view>
<view class="page-section-demo">
<button type="primary" ontap="startbluetoothdevicesdiscovery">开始搜索button>
<button type="primary" ontap="getbluetoothdevices">所有搜索到的设备button>
<button type="primary" ontap="getconnectedbluetoothdevices">所有已连接的设备button>
<button type="primary" ontap="stopbluetoothdevicesdiscovery">停止搜索button>
view>
<view class="page-section-title">连接设备view>
<view class="page-section-demo">
<input class="input" oninput="bindkeyinput" type="{{text}}" placeholder="输入要连接的设备的deviceid">input>
<button type="primary" ontap="connectbledevice">连接设备button>
<button type="primary" ontap="getbledeviceservices">获取设备服务button>
<button type="primary" ontap="getbledevicecharacteristics">获取读写特征button>
<button type="primary" ontap="disconnectbledevice">断开设备连接button>
view>
<view class="page-section-title">读写数据view>
<view>
<text>
charid: {{charid}} \n
text>
<text>
devid: {{devid}} \n
text>
<text>
serid: {{serid}} \n
text>
view>
<view class="page-section-demo">
<button type="primary" ontap="notifyblecharacteristicvaluechange">监听特征值数据变化button>
<button type="primary" ontap="readblecharacteristicvalue">读取数据button>
<button type="primary" ontap="writeblecharacteristicvalue">写入数据button>
<button type="primary" ontap="offblecharacteristicvaluechange">取消特征值监听button>
view>
<view class="page-section-title">其他事件view>
<view class="page-section-demo">
<button type="primary" ontap="bluetoothadapterstatechange">本机蓝牙状态变化button>
<button type="primary" ontap="offbluetoothadapterstatechange">取消本机蓝牙状态监听button>
<button type="primary" ontap="bleconnectionstatechanged">蓝牙连接状态变化button>
<button type="primary" ontap="offbleconnectionstatechanged">取消蓝牙连接状态监听button>
view>
view>
view>
page({
data: {
devid: '',
serid: '',
writeid: '',
charid: '',
},
// 获取本机蓝牙开关状态
openbluetoothadapter() {
my.openbluetoothadapter({
success: res => {
if (!res.issupportble) {
my.alert({ content: '抱歉,您的手机蓝牙暂不可用' });
return;
}
my.alert({ content: '初始化成功!' });
},
fail: error => {
console.error('初始化失败: ', json.stringify(error));
},
});
},
// 关闭蓝牙
closebluetoothadapter() {
my.closebluetoothadapter({
success: () => {
my.alert({ content: '关闭蓝牙成功!' });
},
fail: error => {
console.error('关闭蓝牙失败: ', json.stringify(error));
},
});
},
// 获取本机蓝牙状态
getbluetoothadapterstate() {
my.getbluetoothadapterstate({
success: res => {
if (!res.available) {
my.alert({ content: '抱歉,您的手机蓝牙暂不可用' });
return;
}
my.alert({ content: json.stringify(res) });
},
fail: error => {
console.error('获取蓝牙状态失败: ', json.stringify(error));
},
});
},
// 扫描蓝牙设备
startbluetoothdevicesdiscovery() {
my.startbluetoothdevicesdiscovery({
allowduplicateskey: false,
success: () => {
my.onbluetoothdevicefound({
success: res => {
// my.alert({content:'监听新设备' json.stringify(res)});
var devicearray = res.devices;
for (var i = devicearray.length - 1; i >= 0; i--) {
var deviceobj = devicearray[i];
// 通过设备名称或者广播数据匹配目标设备,然后记录 deviceid 后面使用
if (deviceobj.name == this.data.name) {
my.alert({ content: '目标设备被找到' });
my.offbluetoothdevicefound();
this.setdata({
deviceid: deviceobj.deviceid,
});
break;
}
}
},
fail: error => {
console.error('监听新设备失败: ', json.stringify(error));
},
});
},
fail: error => {
console.error('启动扫描失败: ', json.stringify(error));
},
});
},
// 停止扫描
stopbluetoothdevicesdiscovery() {
my.stopbluetoothdevicesdiscovery({
success: res => {
my.offbluetoothdevicefound();
my.alert({ content: '操作成功!' });
},
fail: error => {
console.error('停止扫描失败: ', json.stringify(error));
},
});
},
// 获取正在连接中的设备
getconnectedbluetoothdevices() {
my.getconnectedbluetoothdevices({
success: res => {
if (res.devices.length === 0) {
my.alert({ content: '没有在连接中的设备!' });
return;
}
my.alert({ content: json.stringify(res) });
this.setdata({
devid: res.devices[0].deviceid,
});
},
fail: error => {
console.error('获取信息失败: ', json.stringify(error));
},
});
},
// 获取所有搜索到的设备
getbluetoothdevices() {
my.getbluetoothdevices({
success: res => {
console.log('getbluetoothdevices', json.stringify(res));
console.log('getbluetoothdevices', res);
my.alert({ content: json.stringify(res) });
},
fail: error => {
console.error('获取信息失败: ', json.stringify(error));
},
});
},
// "输入要连接的设备的 deviceid" input 框事件
bindkeyinput(e) {
this.setdata({
devid: e.detail.value,
});
},
// 连接设备
connectbledevice() {
my.connectbledevice({
deviceid: this.data.devid,
success: res => {
my.alert({ content: '连接成功' });
},
fail: error => {
console.error('连接设备失败: ', json.stringify(error));
},
});
},
// 断开连接
disconnectbledevice() {
my.disconnectbledevice({
deviceid: this.data.devid,
success: () => {
my.alert({ content: '断开连接成功!' });
},
fail: error => {
console.error('断开连接失败: ', json.stringify(error));
},
});
},
// 获取连接设备的 server,必须要再连接状态状态之下才能获取
getbledeviceservices() {
my.getconnectedbluetoothdevices({
success: res => {
if (res.devices.length === 0) {
my.alert({ content: '没有已连接的设备' });
return;
}
my.getbledeviceservices({
deviceid: this.data.devid,
success: res => {
my.alert({ content: json.stringify(res) });
this.setdata({
serid: res.services[0].serviceid,
});
},
fail: error => {
console.error('获取信息失败: ', json.stringify(error));
},
});
},
});
},
// 获取连接设备的 charid,必须要再连接状态状态之下才能获取(这里分别筛选出读写特征字)
getbledevicecharacteristics() {
my.getconnectedbluetoothdevices({
success: res => {
if (res.devices.length === 0) {
my.alert({ content: '没有已连接的设备' });
return;
}
this.setdata({
devid: res.devices[0].deviceid,
});
my.getbledevicecharacteristics({
deviceid: this.data.devid,
serviceid: this.data.serid,
success: res => {
my.alert({ content: json.stringify(res) });
// 特征字对象属性见文档,根据属性匹配读写特征字并记录,然后后面读写使用
this.setdata({
charid: res.characteristics[0].characteristicid,
});
},
fail: error => {
console.error('获取信息失败: ', json.stringify(error));
},
});
},
});
},
// 读数据
readblecharacteristicvalue() {
my.getconnectedbluetoothdevices({
success: res => {
if (res.devices.length === 0) {
my.alert({ content: '没有已连接的设备' });
return;
}
my.alert({
title: '使用的设备',
content: json.stringify(res.devices[0]),
});
this.setdata({
devid: res.devices[0].deviceid,
});
my.readblecharacteristicvalue({
deviceid: this.data.devid,
serviceid: this.data.serid,
characteristicid: this.data.charid,
success: res => {
my.alert({ content: json.stringify(res) });
},
fail: error => {
console.error('读取失败: ', json.stringify(error));
},
});
},
});
},
// 写数据
writeblecharacteristicvalue() {
my.getconnectedbluetoothdevices({
success: res => {
if (res.devices.length === 0) {
my.alert({ content: '没有已连接的设备' });
return;
}
this.setdata({
devid: res.devices[0].deviceid,
});
// 向蓝牙设备发送一个 0x00 的 16 进制数据
const buffer = new arraybuffer(1);
const dataview = new dataview(buffer);
dataview.setuint8(0, 0);
my.writeblecharacteristicvalue({
deviceid: this.data.devid,
serviceid: this.data.serid,
characteristicid: this.data.charid,
value: buffer,
success: res => {
my.alert({ content: '写入数据成功!' });
},
fail: error => {
console.error('写入数据失败: ', json.stringify(error));
},
});
},
});
},
// 监听特征值变化的事件
notifyblecharacteristicvaluechange() {
my.getconnectedbluetoothdevices({
success: res => {
if (res.devices.length === 0) {
my.alert({ content: '没有已连接的设备' });
return;
}
this.setdata({
devid: res.devices[0].deviceid,
});
my.notifyblecharacteristicvaluechange({
state: true,
deviceid: this.data.devid,
serviceid: this.data.serid,
characteristicid: this.data.charid,
success: () => {
// 监听特征值变化的事件
my.onblecharacteristicvaluechange({
success: res => {
// my.alert({content: '特征值变化:' json.stringify(res)});
my.alert({ content: '得到响应数据 = ' res.value });
},
});
my.alert({ content: '监听成功' });
},
fail: error => {
console.error('监听失败: ', json.stringify(error));
},
});
},
});
},
// 取消监听低功耗蓝牙设备的特征值变化
offblecharacteristicvaluechange() {
my.offblecharacteristicvaluechange();
},
// 监听本机蓝牙状态变化
bluetoothadapterstatechange() {
my.onbluetoothadapterstatechange(
this.getbind('onbluetoothadapterstatechange')
);
},
onbluetoothadapterstatechange(res) {
if (res.error) {
my.alert({ content: json.stringify(res.error) });
} else {
my.alert({ content: '本机蓝牙状态变化:' json.stringify(res) });
}
},
offbluetoothadapterstatechange() {
my.offbluetoothadapterstatechange(
this.getbind('onbluetoothadapterstatechange')
);
},
getbind(name) {
if (!this[`bind${name}`]) {
this[`bind${name}`] = this[name].bind(this);
}
return this[`bind${name}`];
},
// 监听低功耗蓝牙连接的错误事件
bleconnectionstatechanged() {
my.onbleconnectionstatechanged(this.getbind('onbleconnectionstatechanged'));
},
onbleconnectionstatechanged(res) {
if (res.error) {
my.alert({ content: json.stringify(res.error) });
} else {
my.alert({ content: '连接状态变化:' json.stringify(res) });
}
},
// 取消监听低功耗蓝牙连接状态变化
offbleconnectionstatechanged() {
my.offbleconnectionstatechanged(
this.getbind('onbleconnectionstatechanged')
);
},
onunload() {
this.offbleconnectionstatechanged();
this.offblecharacteristicvaluechange();
this.offbluetoothadapterstatechange();
this.closebluetoothadapter();
},
});
-
tip若指定的蓝牙设备已连接,重复连接将直接返回 success。
-
tip连接失败时若频繁发起自动重试的请求易挤占资源,造成后续连接失败。请确保上次请求已经结束再发起下一次请求,如在 complete 回调中发起请求。
q:如果系统权限未开启,接口调用报错,如何引导开启系统权限?
可以调用 my.showauthguide 引导用户开启相关系统权限。