需要实现的功能是蓝牙升级硬件的固件。因为升级包有100KB,数据转化后,按照20一包,拆出来有4900多包。因为执行时间较长,需要做一个进度条的功能,其实也很简单,当前发送的次数 / 总次数 其实就是我要的进度,但是现在碰到问题是:我在wx.writeBLECharacteristicValue的success方法中,打印当前的包数…… 4900多包一分钟不到就打印完了,但蓝牙却还一直在工作,差不多要6分钟才完成结束。
这样的话,为什么success的回调在一分钟就执行完了????让我感觉这个success并不是写入操作完成后触发,而是将写入动作放进队列里就触发了一样。
我该如何实现 获取当前正在发的包数的功能呢? (我有试过使用递归的方式,在success方法中执行发送下一包,但这样效率低很多,同样的内容要20分钟才能发送完毕……)
你好,是Android还是ios呢?另外,就是,这个问题本身来说,实际上需要onBLECharacteristicValueChange回调才是蓝牙设备真正收到包了,但是不是所有蓝牙设备都会通知的。
补充:
第一张图是通过递归的方式做的,在wx.writeBLECharacteristicValue的success方法中,发送下一包,这里能看出基本上每次发送中间都间隔了0.3 - 0.5秒左右,使得4000多包要20来分钟才能升级完成。
第二章图是直接循环调用这个api发送,可以看出,每0.001秒能调用1 - 3次接口成功(但是并不等价于设备已经接收到了,因为实际设备里完成全部接收,4000多包大概5分钟)
所以,为了保证速度,我就不能在success里回调去使用,因为太慢了…… 但是不在这里调用,我怎么获取到当前设备真正的进度呢?