收藏
回答

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

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

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

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

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

2 个回答

  • 社区技术运营专员-娇华
    社区技术运营专员-娇华
    09-29

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

    09-29
    有用
    回复 2
    • 蛋蛋
      蛋蛋
      10-02
      我开发用的是Ios的,onBLECharacteristicValueChange这个方法是设备发送数据过来,由于现在要实现的功能时蓝牙升级,bin文件有100来KB,要分包才能发送完成,所以设备在没有出错或没有完成的情况下,中间是不会给我响应的……没法通过这个方式来去判断发送进度… 看我的测试,对wx.writeBLECharacteristicValue里的success触发机制有些看不懂,如果用递归会那么慢,如果不递归,竟然不是发送成功一次执行一次,直接就全部执行了,然后再后台还在那持续的发数据
      10-02
      回复
    • 社区技术运营专员-娇华
      社区技术运营专员-娇华
      10-09回复蛋蛋
      onBLECharacteristicValueChange需要特征值支持notify或indicate,只要有提前notifyBLECharacteristicValueChange,成功写入后是会有这个回调的,如果是写入成功后没有回调可以上传一下日志(再重现一次,在手机微信那里上传下日志: 我->设置->帮助与反馈右上角有个上报日志的入口,提供一下微信号,复现问题的详细时间点(如:2020-4-10 10:10))
      10-09
      回复
  • 蛋蛋
    蛋蛋
    09-29

    补充:

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

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

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

    09-29
    有用
    回复
登录 后发表内容
问题标签