Ver código fonte

refactor(更新) :
- 蓝牙连接失败重试
- 蓝牙连接成功取消连接的bug

周文健 3 meses atrás
pai
commit
fd50586586

+ 13 - 7
app/src/main/java/com/grkj/iscs_mars/ble/BleConnectionManager.kt

@@ -199,7 +199,7 @@ object BleConnectionManager {
     ) {
         Executor.runOnMain {
             CommonUtils.checkBlePermission(activity) {
-                doScanBle(mac, isNeedLoading, prepareDoneCallBack)
+                doScanBle(mac, isNeedLoading, 3, prepareDoneCallBack)
             }
         }
     }
@@ -208,6 +208,7 @@ object BleConnectionManager {
     private fun doScanBle(
         mac: String,
         isNeedLoading: Boolean = false,
+        retryTimes: Int = 3,
         prepareDoneCallBack: ((Boolean, BleBean?) -> Unit)?
     ) {
         LogUtil.i("蓝牙连接-doScanBle:$mac")
@@ -221,18 +222,23 @@ object BleConnectionManager {
                 // 蓝牙未启动重试
                 LogUtil.i("蓝牙连接-参数:${promptStr}")
                 BleManager.getInstance().enableBluetooth()
-                doScanBle(mac, isNeedLoading, prepareDoneCallBack)
+                doScanBle(mac, isNeedLoading, retryTimes, prepareDoneCallBack)
             }
 
             override fun onScanStarted(success: Boolean) {
                 LogUtil.i("蓝牙连接-onScanStarted:${success}")
-                if (!success) {
+                if (!success && retryTimes == 0) {
                     if (isNeedLoading) sendEventMsg(
                         MsgEvent(
                             MSG_EVENT_LOADING, LoadingMsg(false, null, null)
                         )
                     )
                     prepareDoneCallBack?.invoke(false, null)
+                } else if (!success && retryTimes > 0) {
+                    BleManager.getInstance().cancelScan()
+                    ThreadUtils.runOnMainDelayed(3000) {
+                        doScanBle(mac, isNeedLoading, retryTimes - 1, prepareDoneCallBack)
+                    }
                 }
             }
 
@@ -503,14 +509,13 @@ object BleConnectionManager {
                         return@registerConnectListener
                     }
                     isCalled = true
-                    if (isDone) {
+                    if (isDone && cont.isActive) {
                         // 连接成功后,把电关掉(以防万一)
                         controlKeyCharge(false, mac) { }
                         cont.resume(true)
                     } else {
                         cont.resume(false)
                     }
-                    cont.cancel()
                 }
             }
             LogUtil.i("蓝牙连接-第一次连接:${firstTry},是否继续尝试上电连接${withOpenCharge}")
@@ -546,8 +551,9 @@ object BleConnectionManager {
                     isCalled = true
                     // 无论成功或失败,都先把电关掉
                     controlKeyCharge(false, mac) { }
-                    cont.resume(isDone)
-                    cont.cancel()
+                    if (cont.isActive) {
+                        cont.resume(isDone)
+                    }
                 }
             }
             return@withContext secondTry

+ 3 - 2
app/src/main/java/com/grkj/iscs_mars/view/presenter/JobProgressPresenter.kt

@@ -147,8 +147,9 @@ class JobProgressPresenter : BasePresenter<IJobProgressView>() {
                         ToastUtils.tip(R.string.please_take_out_ready_device_first)
                     }
                     val isNeedKey =
-                        ticketDetail.ticketKeyVOList?.filter { it.keyId == null }?.size != 1
-                                && BusinessManager.mDeviceTakeList.none { it.deviceType == DEVICE_TYPE_KEY && it.ticketId == ticketId }
+//                        ticketDetail.ticketKeyVOList?.filter { it.keyId == null }?.size != 1
+//                                &&
+                                BusinessManager.mDeviceTakeList.none { it.deviceType == DEVICE_TYPE_KEY && it.ticketId == ticketId }
                     LogUtil.i("needLockCount = $needLockCount , readyLockCount = $readyLockCount, realCount = $realCount, isNeedKey = $isNeedKey")
                     BusinessManager.checkEquipCount(realCount, isNeedKey) { keyPair, lockMap ->
                         if (needLockCount == 0) {