- 不同操作系统中 wx.scanCode 和 onShow钩子事件 一起使用会有bug?
先说一下需求,我需要在onShow事件里注册一个事件A,当调用wx.scanCode成功获取到扫码结果后触发这个事件A,然后在onHide事件里关闭这个事件A。 经过测试,Android系统调取wx.scanCode成功获取到扫码结果后先会执行onShow事件再获取结果。而IOS系统恰恰相反,它是先获取到结果后再触发onShow事件。导致我的业务出现了奇怪的问题,Android系统扫码后正常的触发了事件A,但是IOS系统扫码后不会触发事件A,因为事件A还没被注册就去触发事件A当然无效。 代码片段:注意看日志,安卓系统和ios在扫码成功后获取结果的日志打印顺序不同。
10-25 - 调用蓝牙模块API的不一致性?
先说一下需求,公司项目需要操作两个不同类型的蓝牙设备,蓝牙打印机和蓝牙电子秤。两厂家都提供对应操作蓝牙设备的SDK,一整捣鼓后终于能同时连接两个不同类型的蓝牙设备,但是问题出现了!先连接的设备怎么没有数据??? 单独连接某一个打印机或者秤没问题能打印,也能读取电子秤重量数据。 一系列蓝牙API测试后终于发现了问题.... 检查API入下(重点!下列API有坑有大坑!!!): onBluetoothAdapterStateChange onBluetoothDeviceFound onBLEConnectionStateChange onBLECharacteristicValueChange 两厂家提供的SDK都操作了上述某些API将会导致冲突!!!,下面我用UNIAPP来做代码测试。 1.第一个案例,猜猜寻找到新设备后 callback1 和 callback2 都会执行吗? [图片] 答案是不会!因为onBluetoothDeviceFound后面注册的回调会覆盖前面注册回调! 2.第二个案例,猜猜蓝牙适配器变化后 callback1 和 callback2 都会执行吗? [图片] 答案是会!因为每次调用onBluetoothAdapterStateChange注册的回调是独立的! 经过测试 onBluetoothDeviceFound ,onBLECharacteristicValueChange 重复调用会覆盖之前的回调。onBluetoothAdapterStateChange , onBLEConnectionStateChange 不会覆盖之前的回调,而是独立的回调。 看完上述两个案例基本上已经确认为什么会导致冲突出现了。两厂家提供的SDK都会去操作相同的API,有些API只会全局注册一次,但是API的特性不一致这一始料未及的操作留下的隐患被我踩到了! onBLECharacteristicValueChange 这个重要的API双方厂家的SDK都会调用,导致后调用的把先调用的覆盖掉了程序上就鬼畜了。 最后希望官方能够统一这些API调用效果,保留onBluetoothAdapterStateChange ,onBLEConnectionStateChange 这种独立回调的特性,不需要的时候调用off传入参数关闭指定回调,这样我只操作我自己注册的回调而不是把别人的回调一起关闭了!!!
10-23