AJXMJC
AJXMJC
  • 发布:2020-09-28 20:12
  • 更新:2022-11-17 14:30
  • 阅读:2814

【报Bug】app蓝牙notifyBLECharacteristicValueChange无法停止通知

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: windows10

HBuilderX类型: Alpha

HBuilderX版本号: 2.9.0

手机系统: iOS

手机系统版本号: IOS 14

手机厂商: 苹果

手机机型: iPhone8

页面类型: vue

打包方式: 云端

项目创建方式: HBuilderX

示例代码:

uni.notifyBLECharacteristicValueChange({state:false,……}) 无效

操作步骤:

打开蓝牙链接,
await uni.notifyBLECharacteristicValueChange({state:true,……})
然后
await uni.notifyBLECharacteristicValueChange({state:false,……}) 这里无效
两个 characteristic 时 notifyBLECharacteristicValueChange 有问题。

预期结果:

希望和微信逻辑一样 uni.notifyBLECharacteristicValueChange({state:false,……}) 能停止通知。
多个特征时 notifyBLECharacteristicValueChange 能区分。

实际结果:

uni.notifyBLECharacteristicValueChange({state:false,……}) 不能停止通知
notifyBLECharacteristicValueChange 数据混乱。

bug描述:

启用通知后 无法用 uni.notifyBLECharacteristicValueChange({state:false,……}) 停止通知。
还有当有多个特征值时,onBLECharacteristicValueChange 数据严重混乱,
已经用 characteristicId 判断哪个特征id了,但是特征id会改变。
假设特征A,每200毫秒发送一个数据,打开通知 然后用 writeBLECharacteristicValue 往 特征B发数据,
那么onBLECharacteristicValueChange characteristicId 可能就会是 永远是A的或者永远是B的
没有办法区分哪个 characteristicId 发送的数据了,要么全部是A的数据,要么全部是B的数据
同样代码用 发布微信小程序测试完全正常,数据也能区分,app就很混乱。

2020-09-28 20:12 负责人:CLP 分享
已邀请:
AJXMJC

AJXMJC (作者)

  • CLP

    notifyBLECharacteristicValueChange 数据混乱-----------这个问题应该不存在。订阅多个特征值的时候,监听到的返回数据是有特征值ID的。 你说的特征值id怎么会变了??

    2020-09-30 18:36

  • CLP

    另外,安卓有这个问题吗?

    2020-09-30 18:36

  • CLP

    onBLECharacteristicValueChange. 只调用一次

    2020-09-30 18:47

  • AJXMJC (作者)

    回复 CLP: 是多个特征值,特征值会改变

    2020-10-08 13:56

  • CLP

    回复 AJXMJC: 多个特征值没关系啊,订阅了多个特征值,监听返回的数据里用特征值来区分就可以了

    2020-10-09 11:49

  • AJXMJC (作者)

    回复 CLP: 现在问题就在这里了,特征id改变,B特征打开通知后,往A特征write并read 后,

    onBLECharacteristicValueChange 里面的 特征id就全部变成特征A的id,用特征B的id去判断根本不会有数据呀

    2020-10-09 16:16

  • CLP

    回复 AJXMJC: 你QQ多少

    2020-10-09 16:50

  • AJXMJC (作者)

    回复 CLP: 已经私信发了

    2020-10-09 17:04

CLP

CLP

uni.notifyBLECharacteristicValueChange({state:false,……}) 这里无效。这个功能应该是没有现实。你什么需求需要这个功能了?

  • AJXMJC (作者)

    数据从arduino串口发送通知过来,频率太高,

    一直发送,时间长了低端手机会有延时,所有想做成按需通知。

    需要时打开通知,不需要时关闭通知。

    2020-10-08 13:59

  • CLP

    回复 AJXMJC: 你说的关闭,其实还是再监听,只是不返回数据而已

    2020-10-09 12:38

  • AJXMJC (作者)

    回复 CLP: 微信小程序停止通知时会触发后台蓝牙 StopNotify,后台StopNotify停止通知后就会暂停处理串口数据,不在往特征值写数据。

    这个是不一样的。

    2020-10-09 16:12

  • 亦岑

    能帮我看看嘛这个问题已经卡我两天了没有解决

    2023-05-24 23:54

AJXMJC

AJXMJC (作者)

安卓手机测试,特征A有 read、write,特征B有read、notify,然而

uni.readBLECharacteristicValue({ deviceId: xx, serviceId: xx, characteristicId: 特征A })

竟然出错,
{ "errMsg": "readBLECharacteristicValue:fail property not support", "errCode": 10007 }
“当前特征值不支持此操作”,但是 特征A 是有读写权限的,ISO也能正常读取。
app端蓝牙bug太多了,小程序就没有任何问题。

  • jrexe

    建立连接后 延时个 1000ms再依次调用读取服务 ,获取特征值,然后再readBLECharacteristicValue 试试

    2020-10-08 14:34

  • AJXMJC (作者)

    回复 jrexe: 一样不行

    2020-10-09 16:17

179707789

179707789 - 1111

安卓系统 state传入false也关闭不了通知

要回复问题请先登录注册