快速接入
基本流程
对于有蓝牙接入需求的开发者,需要通过以下步骤完成蓝牙接入:
- 初始化蓝牙接口(my.openBluetoothAdapter)
- 初始化事件监听
- 搜索设备(my.startBluetoothDevicesDiscovery)
- 查找设备并连接(my.connectBLEDevice)
- 停止搜索设备(my.stopBluetoothDevicesDiscovery)
- 遍历蓝牙外设服务和特征
- 监听特征值变化事件通知(my.onBLECharacteristicValueChange)
- 设置读特征通知模式(my.notifyBLECharacteristicValueChange)
- 读写数据
- 断开连接(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方法,关闭之前的事件监听。