支付宝小程序蓝牙 快速接入

基本流程

对于有蓝牙接入需求的开发者,需要通过以下步骤完成蓝牙接入:

初始化蓝牙接口(my.openBluetoothAdapter)

初始化事件监听

蓝牙适配器状态监听(my.onBluetoothAdapterStateChange)

蓝牙发现事件监听(my.onBluetoothDeviceFound)

蓝牙连接状态事件监听(my.onBLEConnectionStateChanged)

搜索设备(my.startBluetoothDevicesDiscovery)

查找设备并连接(my.connectBLEDevice)

停止搜索设备(my.stopBluetoothDevicesDiscovery)

遍历蓝牙外设服务和特征

获取服务(my.getBLEDeviceServices)

获取特征(my.getBLEDeviceCharacteristics)

监听特征值变化事件通知(my.onBLECharacteristicValueChange)

设置读特征通知模式(my.notifyBLECharacteristicValueChange)

读写数据

向设备的特征值写数据(my.writeBLECharacteristicValue)

向设备的特征值读数据(my.readBLECharacteristicValue)

断开连接(my.disconnectBLEDevice)

关闭蓝牙适配器(my.closeBluetoothAdapter)

业务流程图

调用示例

//初始化
my.openBluetoothAdapter({
success: (res) => {
console.log(res);
}
});
//注册发现事件
my.onBluetoothDeviceFound({
success: (res) => {
let device = res.devices[0];
//连接发现的设备
my.connectBLEDevice({
deviceId: deviceId,
success: (res) => {
console.log(res)
},
fail:(res) => {
},
complete: (res)=>{
}
});
//停止搜索
my.stopBluetoothDevicesDiscovery({
success: (res) => {
console.log(res)
},
fail:(res) => {
},
complete: (res)=>{
}
});
}
});
//注册连接事件
my.onBLEConnectionStateChanged({
success: (res) => {
console.log(res);
if (res.connected) {
//开始读写notify等操作
my.notifyBLECharacteristicValueChange({
deviceId: deviceId,
serviceId: serviceId,
characteristicId: characteristicId,
success: (res) => {
console.log(res)
},
fail:(res) => {
},
complete: (res)=>{
}
});
}
}
});
//注册接收read或notify的数据
my.onBLECharacteristicValueChange({
success: (res) => {
console.log(res);
}
});
//开始搜索
my.startBluetoothDevicesDiscovery({
services: ['fff0'],
success: (res) => {
console.log(res)
},
fail:(res) => {
},
complete: (res)=>{
}
});
//断开连接
my.disconnectBLEDevice({
deviceId: deviceId,
success: (res) => {
console.log(res)
},
fail:(res) => {
},
complete: (res)=>{
}
});
//注销事件
my.offBluetoothDeviceFound();
my.offBLEConnectionStateChanged();
my.offBLECharacteristicValueChange();
//退出蓝牙模块
my.closeBluetoothAdapter({
success: (res) => {
},
fail:(res) => {
},
complete: (res)=>{
}
});

常见问题

支持版本 android4.3以上支持ble

ios6以上都支持

deviceId,android取到的是蓝牙的mac地址(11:22:33:44:55:66),ios取到的是UUID(00000000-0000-0000-0000-000000000000这种格式)

调startBluetoothDevicesDiscovery接口搜索不到设备,请确保设备发出了广播。如果接口中有传入services,请确保设备的广播内容中包含了service的UUID

连接设备失败,请确认传入的deviceId是否正确,以及设备发出的信号是否足够强,在信号弱的时候可能会出现连接不上的情况

写数据失败,查看传入的deviceId、serviceId、characteristicId格式是否正确,deviceId是否已连接上(onBLEConnectionStateChanged这个事件中可以监听连接状态变化,getConnectedBluetoothDevices这个方法可以拿到),确保是在连接状态下调写入方法,查看characteristicId是否属于这个service,以及这个特征值是否支持写

读数据失败,同上,查看这个特征值是否支持读

收不到数据通知,请确认调了notifyBLECharacteristicValueChange这个方法以及传入的参数是否正确,传入的characteristicId特征值是否支持notify或indicate,以及确认硬件是否发出了通知。注意调用notifyBLECharacteristicValueChange方法的以及注册onBluetoothDeviceFound事件的顺序,最好是在连接之后就调用notifyBLECharacteristicValueChange方法。

事件回调多次调用,是由于多次匿名函数注册监听同一事件,因此建议每次调用on方法监听事件之前,先调用off方法,关闭之前的事件监听。