Open Wheats opened 2 years ago
感谢作者无私分享,非常谢谢
1.框架存储蓝牙信息在 MultipleBluetoothController类
1.通过分析,看出意图,一个bleLruHashMap类,跟bleTempHashMap类。
bleTempHashMap保存临时准备连接的设备,
在设备连接成功后,转移至bleLruHashMap类,
问题在设备还处于bleTempHashMap类时,我们调用断开连接,这个时候bleLruHashMap 还未入列
从而引发问题,设备会走超时动作。app端在使用时,点击断开了,超时后还是发出来了通知,多弹了一个框
解决方法,内部没有太多时间深究,
1.MultipleBluetoothController类增加
public synchronized BreoBleBluetooth getBleTempBluetooth(BreoBleDevice breoBleDevice) { if (breoBleDevice != null) { if (bleTempHashMap.containsKey(breoBleDevice.getKey())) { return bleTempHashMap.get(breoBleDevice.getKey()); } } return null; }
2.
public synchronized boolean isConnectIngDevice(BluetoothDevice bluetoothDevice) { return bluetoothDevice != null && bleTempHashMap.containsKey(bluetoothDevice.getName() + bluetoothDevice.getAddress()); }
3.修改
public synchronized void disconnect(BreoBleDevice breoBleDevice) { if (isContainDevice(breoBleDevice)) { getBleBluetooth(breoBleDevice).disconnect(); } if (isConnectIngDevice(breoBleDevice.getDevice())) { getBleTempBluetooth(breoBleDevice).disConnectTemp(); } }
1.在BreoBleBluetooth类增加删除断连接方法
逻辑为 1.断开超时接受(连接动作已产生) 2.移除临时缓存的bleTempHashMap 3.这里我已主动断开的方式,发送给上层app做处理。而不是超时啦 4.关闭需要关闭的方法,
public synchronized void disConnectTemp() { //取消还未连接上的设备 if (mainHandler != null) { mainHandler.removeMessages(BreoBleMsg.MSG_CONNECT_OVER_TIME); lastState = LastState.CONNECT_DISCONNECT; BreoCoreBleManager.getInstance().getMultipleBluetoothController().removeConnectingBle(BreoBleBluetooth.this); if (bleGattCallback != null) bleGattCallback.onDisConnected(true, breoBleDevice, bluetoothGatt, 1); disconnect(); refreshDeviceCache(); closeBluetoothGatt(); removeRssiCallback(); removeMtuChangedCallback(); clearCharacterCallback(); mainHandler.removeCallbacksAndMessages(null); } }
到这里搞定啦,
你那边会出现经常出现连接超时的问题吗
感谢作者无私分享,非常谢谢
1.框架存储蓝牙信息在 MultipleBluetoothController类
1.通过分析,看出意图,一个bleLruHashMap类,跟bleTempHashMap类。
bleTempHashMap保存临时准备连接的设备,
在设备连接成功后,转移至bleLruHashMap类,
问题在设备还处于bleTempHashMap类时,我们调用断开连接,这个时候bleLruHashMap 还未入列
从而引发问题,设备会走超时动作。app端在使用时,点击断开了,超时后还是发出来了通知,多弹了一个框
解决方法,内部没有太多时间深究,
1.MultipleBluetoothController类增加
2.
3.修改
1.在BreoBleBluetooth类增加删除断连接方法
逻辑为 1.断开超时接受(连接动作已产生) 2.移除临时缓存的bleTempHashMap 3.这里我已主动断开的方式,发送给上层app做处理。而不是超时啦 4.关闭需要关闭的方法,
到这里搞定啦,