许香香
许香香
  • 发布:2020-05-25 09:54
  • 更新:2020-06-30 11:46
  • 阅读:1652

【报Bug】安卓蓝牙读取特征值变化value为空!

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: win10专业版

HBuilderX类型: 正式

HBuilderX版本号: 2.7.5

手机系统: Android

手机系统版本号: Android 5.1

手机厂商: OPPO

手机机型: oppo a33m

页面类型: vue

打包方式: 云端

项目创建方式: HBuilderX

示例代码:

用官方的hello例子

操作步骤:

就官方demo通我就能通

预期结果:

出现值

实际结果:

没有值

bug描述:

串口2s发一次信息

2020-05-25 09:54 负责人:无 分享
已邀请:
DCloud_UNI_GSQ

DCloud_UNI_GSQ

是更新后才出现的问题吗?之前是否正常?
试试直接使用5+的接口监听:http://www.html5plus.org/doc/zh_cn/bluetooth.html#plus.bluetooth.onBLECharacteristicValueChange

  • 许香香 (作者)

    之前没用过。刚刚我换了低版本的hbuilderx(2.6.1),运行官方hello-uniapp,value依旧为空,00000000000000000(约20个0),

    2020-05-25 15:14

  • DCloud_UNI_GSQ

    回复 许香香: 试试直接使用5+的接口监听:http://www.html5plus.org/doc/zh_cn/bluetooth.html#plus.bluetooth.onBLECharacteristicValueChange

    2020-05-25 15:56

  • 许香香 (作者)

    回复 DCloud_UNI_GSQ: 确实出现了特征值,特征值是:595958000000000000000000ffffffff,而且特征值不管怎么变化都是595958000000000000000000ffffffff

    2020-05-26 11:32

  • DCloud_UNI_GSQ

    回复 许香香: 你是说使用 plus.bluetooth.onBLECharacteristicValueChange 也有问题是吗?

    2020-05-26 14:13

  • 许香香 (作者)

    回复 DCloud_UNI_GSQ: 是的,我只单独使用了他

    2020-05-26 15:12

  • 许香香 (作者)

    回复 DCloud_UNI_GSQ: 代码写在下面了

    2020-05-26 15:25

  • 许香香 (作者)

    回复 DCloud_UNI_GSQ: 刚刚把所有的都使用了,h5+app写入uniapp里面,然后就都是00000000000000000000了, plus.bluetooth.notifyBLECharacteristicValueChange就不给回调了于是又改成uni.notifyBLECharacteristicValueChange,然后就是0000000000000了

    2020-05-27 09:49

许香香

许香香 (作者) - 95后前端

即使转换成了二进制,还是空,打印出一堆0(约20个

许香香

许香香 (作者) - 95后前端

            // 读取机器2进制事件, 读取后订阅,订阅后监听  
            readBLECharacteristicValue() {  
                const deviceId = uni.getStorageSync('deviceId')  
                const serviceId = uni.getStorageSync('serviceId')  
                const characteristicId = uni.getStorageSync('characteristicId')  
                console.log(deviceId);  
                console.log(serviceId);  
                console.log(characteristicId);  
                uni.readBLECharacteristicValue({  
                    // 这里的 deviceId 需要已经通过 createBLEConnection 与对应设备建立链接  
                    deviceId,  
                    // 这里的 serviceId 需要在 getBLEDeviceServices 接口中获取  
                    serviceId,  
                    // 这里的 characteristicId 需要在 getBLEDeviceCharacteristics 接口中获取  
                    characteristicId,  
                    success: res => {  
                        console.log('读取设备数据值成功');  
                        console.log(JSON.stringify(res));  
                        this.notifyBLECharacteristicValueChange(); //读之后调用这个,调用完了跳转新页面,之后才是写功能  
                    },  
                    fail(e) {  
                        console.log('读取设备数据值失败,错误码:' + e.errCode);  
                        if (e.errCode !== 0) {  
                            initTypes(e.errCode);  
                        }  
                    }  
                });  
                // this.onBLECharacteristicValueChange();  
            },  
            /**  
             * 订阅操作成功后需要设备主动更新特征值的 value,才会触发 uni.onBLECharacteristicValueChange 回调。  
             */  
            notifyBLECharacteristicValueChange() {  
                const deviceId = uni.getStorageSync('deviceId')  
                const serviceId = uni.getStorageSync('serviceId')  
                const characteristicId = uni.getStorageSync('characteristicId')  
                // let notify = this.characteristicsData[0].properties.notify;  
                console.log(deviceId);  
                console.log(serviceId);  
                console.log(characteristicId);  
                // console.log(notify);  
                //new  
                plus.bluetooth.notifyBLECharacteristicValueChange({  
                        deviceId,  
                        serviceId,  
                        characteristicId,  
                        success:function(e){  
                            console.log('uni.notifyBLECharacteristicValueChange - res : ', JSON.stringify(e));  
                            function ab2hex(buffer) {  
                                const hexArr = Array.prototype.map.call(  
                                    new Uint8Array(buffer),  
                                    function(bit) {  
                                        return ('00' + bit.toString(16)).slice(-2)  
                                    }  
                                )  
                                return hexArr.join('')  
                            }  
                            plus.bluetooth.onBLECharacteristicValueChange(function(e){  
                                console.log('onBLECharacteristicValueChange: '+JSON.stringify(e));  
                                console.log(`characteristic ${e.characteristicId} has changed, now is ${JSON.stringify(e.value)}`)  
                                var value = ab2hex(e.value);  
                                console.log('value(hex) = '+value);  
                                if(characteristicId == e.characteristicId){  
                                    // 更新到页面显示  
                                    alert('特征值变化: '+value);  
                                }  
                            });  
                            },  
                        fail:function(e){  
                            console.log('get characteristics failed: '+JSON.stringify(e));  
                        }  
                    });  
            },
许香香

许香香 (作者) - 95后前端

已解决-解决方式换了个新蓝牙

  • yaomu

    我也遇到同样的问题,求解,换新蓝牙怎么理解呢

    2021-10-15 11:34

该问题目前已经被锁定, 无法添加新回复