uni-app真机调试时蓝牙onBLECharacteristicValueChange无响应,侦听不到数据

发布于 1周前 作者 nodeper 来自 Uni-App

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

27 回复

这个是用uniapp手机调试的日志


楼主解决问题了吗?我也遇到onBLECharacteristicValueChange没响应问题

您的这个问题解决了么,没有响应

回复 自用仓库: 没有,放弃了,这个应是他们编译的问题,我用flutter写的是可以监听的。现在BOSS决定先用flutter先试试看。。。等后续官方修复吧,希望快点修复这个问题了。

回复 zhyj: 我们用原生插件了,用uniapp的总是有问题

回复 自用仓库: 可以教教吗

楼主解决了吗?我这个事件value值为空

解决了么这个问题

回复 自用仓库: 回复 自用仓库: 没有,放弃了,这个应是他们编译的问题,我用flutter写的是可以监听的。现在BOSS决定先用flutter先试试看。。。等后续官方修复吧,希望快点修复这个问题了。

同求啊

又是个填不上的坑啊 这都2022年了还没解决。。

问一下解决了吗 我今天也发现这个问题了

回复 1***@qq.com: 解决了

回复 侠客请接刀s: 怎么解决的呢?麻烦分享一下方案

回复 侠客请接刀s: 可以说说吗

回复 侠客请接刀s: 怎么解决的,可以说说吗

回复 6***@qq.com: 解决了吗

回复 侠客请接刀s: 怎解决的 可以说说吗

回复 侠客请接刀s: 你怎么解决的,可以说说吗

2022.10.28了。有人解决了嘛, 安卓ok的,但是ios订阅显示成功,但是订阅值未变化,

我的安卓死活收不到消息,能不能问一下你的安卓是怎么写的

我的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 无响应的问题。如果问题仍然存在,可能需要进一步检查设备的固件或协议实现。

回到顶部