收藏
回答

wx.writeBLECharacteristicValue怎么监听执行完成?

需要实现的功能是蓝牙升级硬件的固件。因为升级包有100KB,数据转化后,按照20一包,拆出来有4900多包。因为执行时间较长,需要做一个进度条的功能,其实也很简单,当前发送的次数 / 总次数 其实就是我要的进度,但是现在碰到问题是:我在wx.writeBLECharacteristicValue的success方法中,打印当前的包数…… 4900多包一分钟不到就打印完了,但蓝牙却还一直在工作,差不多要6分钟才完成结束。

这样的话,为什么success的回调在一分钟就执行完了????让我感觉这个success并不是写入操作完成后触发,而是将写入动作放进队列里就触发了一样。

我该如何实现 获取当前正在发的包数的功能呢? (我有试过使用递归的方式,在success方法中执行发送下一包,但这样效率低很多,同样的内容要20分钟才能发送完毕……)

回答关注问题邀请回答
收藏

2 个回答

  • 疯狂的小辣椒
    疯狂的小辣椒
    2020-09-29

    你好,是Android还是ios呢?另外,就是,这个问题本身来说,实际上需要onBLECharacteristicValueChange回调才是蓝牙设备真正收到包了,但是不是所有蓝牙设备都会通知的。

    2020-09-29
    有用
    回复 5
    • 蛋蛋
      蛋蛋
      2020-10-02
      我开发用的是Ios的,onBLECharacteristicValueChange这个方法是设备发送数据过来,由于现在要实现的功能时蓝牙升级,bin文件有100来KB,要分包才能发送完成,所以设备在没有出错或没有完成的情况下,中间是不会给我响应的……没法通过这个方式来去判断发送进度… 看我的测试,对wx.writeBLECharacteristicValue里的success触发机制有些看不懂,如果用递归会那么慢,如果不递归,竟然不是发送成功一次执行一次,直接就全部执行了,然后再后台还在那持续的发数据
      2020-10-02
      回复
    • 疯狂的小辣椒
      疯狂的小辣椒
      2020-10-09回复蛋蛋
      onBLECharacteristicValueChange需要特征值支持notify或indicate,只要有提前notifyBLECharacteristicValueChange,成功写入后是会有这个回调的,如果是写入成功后没有回调可以上传一下日志(再重现一次,在手机微信那里上传下日志: 我->设置->帮助与反馈右上角有个上报日志的入口,提供一下微信号,复现问题的详细时间点(如:2020-4-10 10:10))
      2020-10-09
      回复
    • 阿白
      阿白
      2020-12-14
      wx.writeBLECharacteristicValue底层是不是用Response发送的?建议小程序sdk可以指定response或noresponse发送数据,因为response发送数据,就像tcp一样,需要双方确认才会回调,导致回调的时间特别长。至于怎么保证数据的完整性,交给上层应用来做
      2020-12-14
      回复
    • 张玉龙
      张玉龙
      2021-01-10
      请问现在问题解决了么?我也是想监听发送状态。onBLECharacteristicValueChange是特征值改变,就是蓝牙设备给手机发数据进的回调。这和wx.writeBLECharacteristicValue不是一回事儿。
      2021-01-10
      回复
    • 疯狂的小辣椒
      疯狂的小辣椒
      2021-01-11回复张玉龙
      麻烦单独发帖反馈下,并按照提示补全下信息
      2021-01-11
      回复
  • 蛋蛋
    蛋蛋
    2020-09-29

    补充:

    第一张图是通过递归的方式做的,在wx.writeBLECharacteristicValue的success方法中,发送下一包,这里能看出基本上每次发送中间都间隔了0.3 - 0.5秒左右,使得4000多包要20来分钟才能升级完成。

    第二章图是直接循环调用这个api发送,可以看出,每0.001秒能调用1 - 3次接口成功(但是并不等价于设备已经接收到了,因为实际设备里完成全部接收,4000多包大概5分钟)

    所以,为了保证速度,我就不能在success里回调去使用,因为太慢了…… 但是不在这里调用,我怎么获取到当前设备真正的进度呢?

    2020-09-29
    有用
    回复 2
    • 拾忆
      拾忆
      2020-12-31
      我现在遇到的问题是跟你一样的
      2020-12-31
      回复
    • 张玉龙
      张玉龙
      2021-01-10
      蛋蛋同学,你的问题解决了没。我也遇到同样问题,就是如果瞬间给蓝牙发几十包数据,sucess瞬间回调成功。但实际能看到蓝牙底层在一点点排队往外发数据,但这个状态咋能知道呢?
      2021-01-10
      回复
登录 后发表内容
问题标签