// 蓝牙设备id,可通过onBluetoothDeviceFound方法获取
var deviceId = '';
// 蓝牙服务id,可通过getBLEDeviceServices方法获取
var serviceId = '';
// 蓝牙特征值id,可通过getBLEDeviceCharacteristics方法获取
var characteristicId = '';
// 启用低功耗蓝牙设备特征值变化时的notify功能
function startCharacteristicsNotify(){
// 监听低功耗蓝牙设备的特征值变化
plus.bluetooth.onBLECharacteristicValueChange(function(e){
console.log('onBLECharacteristicValueChange: '+JSON.stringify(e));
var value=new Uint8Array(characteristicId.value);
var t='';
for(var i in value){
t += '0x'+value[i].toString(16)+' ';
}
document.getElementById('readvalue').value = t; //界面显示函数
});
// 启用notify功能
plus.bluetooth.notifyBLECharacteristicValueChange({
deviceId:deviceId,
serviceId:serviceId,
characteristicId:characteristicId,
success:function(e){
var characteristics = e.characteristics;
console.log('get characteristics success: '+characteristics.length);
for(var i in characteristics){
console.log(i+': '+JSON.stringify(characteristics[i]));
}
},
fail:function(e){
console.log('get characteristics failed: '+JSON.stringify(e));
}
});
}
详细问题描述
[内容]
***notifyBLECharacteristicValueChange
启用低功耗蓝牙设备特征值变化时的notify功能,订阅特征值
重现步骤
[步骤] 连接蓝牙(createBLEConnection) → 获取设备服务(getBLEDeviceServices) → 订阅特征值(notifyBLECharacteristicValueChange,特征值写在配置文件中直接订阅) → 监听数据变化(onBLECharacteristicValueChange)
[结果] onBLECharacteristicValueChange 可以获取支持notify特征值的变化,但是界面显示速度很慢与蓝牙传输速度不匹配!!!实测在控制台打印速度很快,但是界面显示很慢!!!
[其他]
苹果系统运行HC42不存在该问题。安卓原生开发不存在该问题。使用HC08(ble4.0)苹果和安卓都不存在问题。因此怀疑封装函数在安卓端与ble5.0不兼容引起该问题!!!!
l***@qq.com (作者)
界面更新不及时,就是打印控制台看起来速度很快,但是界面就是不更新数据。
2020-06-11 17:25
l***@qq.com (作者)
我自己回复一下,我测试了uni-app,H5+app,发现该问题可能是该类app的缺陷就是不能快速响应吧,如果线程做太多事情估计界面会产生阻塞。而且界面响应速度明显低于android原生。
2020-06-11 19:32
DCloud_Android_zl
回复 l***@qq.com: 有没有估算一下,一秒钟大约响应多少次会出现你所说的问题?
2020-06-15 15:08