uni-app真机调试时蓝牙onBLECharacteristicValueChange无响应,侦听不到数据
uni-app真机调试时蓝牙onBLECharacteristicValueChange无响应,侦听不到数据
代码示例
function monitorNotification() {
uni['notifyBLECharacteristicValueChange']({
deviceId: connectDeviceId,
serviceId: serviceUUID,
characteristicId: readUUID,
state: true,
success: function(res) {
console.log('notifyBLECharacteristicValueChange', res)
uni['onBLECharacteristicValueChange'](function(ffyevz2) {
console.log('onBLECharacteristicValueChange', ffyevz2)
if (ffyevz2['deviceId'] = connectDeviceId && ffyevz2['serviceId'] == serviceUUID && ffyevz2['characteristicId'] == readUUID) {
analyticData(ffyevz2['value'])
}
})
},
fail: function(res) {
console.log('notifyBLECharacteristicValueChange fail', res)
if (typeof connectTimer != undefined) {
clearTimeout(connectTimer)
}
typeof connectCallback == FUNCTION && connectCallback(codeEnum['monitorNotificationFailure'])
}
});
}
前面的都成功了,
我要侦听的特征值 {"uuid":"0000FEC8-0000-1000-8000-00805F9B34FB","properties":{"read":false,"write":false,"notify":false,"indicate":true}
也读取到了。并且 notifyBLECharacteristicValueChange
也成功了
notifyBLECharacteristicValueChange---COMMA------BEGIN:JSON---{"errMsg":"notifyBLECharacteristicValueChange:ok"}---END:JSON-
但是后面侦听就没有东西了。
同样的代码,我在小程序测试的时候,就能读取到设备发过来的信息。
这个是小程序的调试日志:
开发环境与版本信息
项目创建方式 | HBuilderX |
---|---|
HBuilderX 版本 | 2.5.1 |
手机型号 | 小米 MI 8 SE |
系统版本 | MUI 11.0.3 |
这个是用uniapp手机调试的日志
楼主解决问题了吗?我也遇到onBLECharacteristicValueChange没响应问题
您的这个问题解决了么,没有响应
回复 zhyj: 我们用原生插件了,用uniapp的总是有问题
回复 自用仓库: 可以教教吗
楼主解决了吗?我这个事件value值为空
解决了么这个问题
回复 自用仓库: 回复 自用仓库: 没有,放弃了,这个应是他们编译的问题,我用flutter写的是可以监听的。现在BOSS决定先用flutter先试试看。。。等后续官方修复吧,希望快点修复这个问题了。
同求啊
又是个填不上的坑啊 这都2022年了还没解决。。
问一下解决了吗 我今天也发现这个问题了
回复 1***@qq.com: 解决了
回复 侠客请接刀s: 怎么解决的呢?麻烦分享一下方案
回复 侠客请接刀s: 可以说说吗
回复 侠客请接刀s: 怎么解决的,可以说说吗
回复 6***@qq.com: 解决了吗
回复 侠客请接刀s: 怎解决的 可以说说吗
回复 侠客请接刀s: 你怎么解决的,可以说说吗
2022.10.28了。有人解决了嘛, 安卓ok的,但是ios订阅显示成功,但是订阅值未变化,
我的安卓死活收不到消息,能不能问一下你的安卓是怎么写的
回复 1***@qq.com: 解决了吗 头大了
回复 9***@qq.com: 解决了,我这边是esp32 服务端的问题/
2023.09.13 有人解决了吗?还是收不到
我的安卓死活收不到消息,但iOS可以正常接受啊。
在uni-app进行真机调试时,如果遇到蓝牙 onBLECharacteristicValueChange
无响应、侦听不到数据的问题,这通常涉及到蓝牙权限、设备连接状态、特征值订阅状态等多个方面。以下是一些可能的代码案例和检查点,帮助你定位和解决问题。
1. 确认蓝牙权限和初始化
首先,确保你的应用已经请求并获得了蓝牙权限。在 manifest.json
中添加必要的权限配置,并在代码中初始化蓝牙适配器。
// 检查并请求蓝牙权限(假设在Android平台)
if (uni.getSystemInfoSync().platform === 'android') {
uni.authorize({
scope: 'scope.userLocation', // 蓝牙权限在Android上通常需要位置权限
success() {
initBluetooth();
},
fail() {
console.error('蓝牙权限请求失败');
}
});
} else {
initBluetooth();
}
function initBluetooth() {
uni.openBluetoothAdapter({
success(res) {
console.log('蓝牙适配器初始化成功', res);
// 继续后续操作,如扫描设备
},
fail(err) {
console.error('蓝牙适配器初始化失败', err);
}
});
}
2. 连接设备并订阅特征值
确保设备已经成功连接,并且已经订阅了正确的特征值。
// 连接蓝牙设备
uni.createBLEConnection({
deviceId: 'YOUR_DEVICE_ID',
success(res) {
console.log('设备连接成功', res);
// 订阅特征值
uni.notifyBLECharacteristicValueChange({
state: true, // 启用notify
deviceId: 'YOUR_DEVICE_ID',
serviceId: 'YOUR_SERVICE_ID',
characteristicId: 'YOUR_CHARACTERISTIC_ID',
success(notifyRes) {
console.log('特征值订阅成功', notifyRes);
},
fail(notifyErr) {
console.error('特征值订阅失败', notifyErr);
}
});
},
fail(err) {
console.error('设备连接失败', err);
}
});
3. 监听特征值变化
使用 onBLECharacteristicValueChange
监听特征值的变化。
uni.onBLECharacteristicValueChange(function (res) {
console.log('接收到蓝牙设备的特征值变化', res);
// 处理接收到的数据
const {deviceId, serviceId, characteristicId, value} = res;
// value 是一个ArrayBuffer,需要转换为具体的数据格式
const dataView = new DataView(value);
const receivedData = dataView.getUint8(0); // 示例:读取第一个字节
console.log('接收到的数据:', receivedData);
});
4. 检查和调试
- 确保设备ID、服务ID和特征值ID正确无误。
- 使用蓝牙调试工具(如nRF Connect)确认设备是否正常广播和响应。
- 在真机上运行应用,并检查控制台输出,查看是否有错误信息。
通过上述步骤和代码,你应该能够定位并解决 onBLECharacteristicValueChange
无响应的问题。如果问题仍然存在,可能需要进一步检查设备的固件或协议实现。