Prechádzať zdrojové kódy

优化蓝牙连接准备流程,调整准备成功结束返回位置,防止获取不到token导致指令发送为null;优化蓝牙指令发送校验,当指令为null时,直接跳过

Frankensteinly 8 mesiacov pred
rodič
commit
a1c10cba52

+ 8 - 5
app/src/main/java/com/grkj/iscs/BusinessManager.kt

@@ -693,7 +693,7 @@ object BusinessManager {
                 override fun onCharacteristicChanged(data: ByteArray?) {
                     LogUtil.i("onCharacteristicChanged : ${data?.toHexStrings()}")
                     data?.let { itData ->
-                        handleRsp(it, itData, isNeedLoading)
+                        handleRsp(it, itData, isNeedLoading, prepareDoneCallBack)
                     }
                 }
             })
@@ -714,7 +714,6 @@ object BusinessManager {
                 override fun onWriteSuccess(current: Int, total: Int, justWrite: ByteArray?) {
                     if (isNeedLoading) mEventBus.postValue(MsgEvent(MSG_EVENT_LOADING, LoadingMsg(false, "token获取成功", null)))
                     LogUtil.i("getToken success : ${bleBean.bleDevice.mac}")
-                    prepareDoneCallBack?.invoke(true, bleBean)
                 }
 
                 override fun onWriteFailure(exception: BleException?) {
@@ -908,7 +907,7 @@ object BusinessManager {
         return jsonStr
     }
 
-    fun handleRsp(bleBean: BleBean, byteArray: ByteArray, isNeedLoading: Boolean = false) {
+    fun handleRsp(bleBean: BleBean, byteArray: ByteArray, isNeedLoading: Boolean = false, prepareDoneCallBack: ((Boolean, BleBean?) -> Unit)?) {
         // TODO Token校验
 //        val len = byteArray[2].toInt()
 //        val token = byteArray.copyOfRange(len + 7, len + 11)
@@ -919,7 +918,11 @@ object BusinessManager {
 //        }
         when {
             // 获取令牌
-            byteArray.startsWith(BleConst.RSP_GET_TOKEN) -> BleCmdManager.handleToken(bleBean.bleDevice, byteArray)
+            byteArray.startsWith(BleConst.RSP_GET_TOKEN) -> BleCmdManager.handleToken(bleBean.bleDevice, byteArray) { isSuccess ->
+                if (isSuccess) {
+                    prepareDoneCallBack?.invoke(true, bleBean)
+                }
+            }
             // 工作模式切换
             byteArray.startsWith(BleConst.RSP_SWITCH_MODE) -> {
                 handleSwitchModeResult(byteArray, isNeedLoading) { res, job ->
@@ -987,7 +990,7 @@ object BusinessManager {
 
             override fun onWriteFailure(exception: BleException?) {
                 LogUtil.i("getCurrentStatus fail : ${bleDevice.mac}")
-                Executor.delayOnMain(500) {
+                Executor.delayOnMain(1000) {
                     getCurrentStatus(from, bleDevice)
                 }
             }

+ 6 - 2
app/src/main/java/com/grkj/iscs/ble/BleCmdManager.kt

@@ -113,13 +113,17 @@ object BleCmdManager {
 
     /**
      * 令牌处理
+     *
+     * @param callBack 是否成功
      */
-    fun handleToken(bleDevice: BleDevice, byteArray: ByteArray) {
+    fun handleToken(bleDevice: BleDevice, byteArray: ByteArray, callBack: ((Boolean) -> Unit)? = null) {
         LogUtil.i("handleToken : ${byteArray.toHexStrings()}")
         BusinessManager.getBleDeviceByMac(bleDevice.mac)?.let {
             it.token = byteArrayOf(byteArray[11], byteArray[12], byteArray[13], byteArray[14])
-
+            callBack?.invoke(true)
             println("Token 赋值 ${it.token?.toHexStrings()} : ${bleDevice.mac}")
+        } ?: let {
+            callBack?.invoke(false)
         }
     }
 

+ 2 - 1
app/src/main/java/com/grkj/iscs/ble/BleUtil.kt

@@ -149,6 +149,8 @@ class BleUtil private constructor() {
               cmd: ByteArray?,
               writeCallback: CustomBleWriteCallback?
     ) {
+        LogUtil.i("ble_write : ${cmd?.toHexStrings()}")
+        cmd ?: return
         if (!BleManager.getInstance().isSupportBle) {
             writeCallback?.onPrompt("该设备不支持蓝牙BLE")
             return
@@ -158,7 +160,6 @@ class BleUtil private constructor() {
             writeCallback?.onPrompt("蓝牙已关闭,请打开蓝牙后重试")
             return
         }
-        LogUtil.i("ble_write : ${cmd?.toHexStrings()}")
         if (BleManager.getInstance().isConnected(bleDevice.mac)) {
             BleManager.getInstance().write(bleDevice, serviceUUID, writeUUID, cmd, writeCallback)
         } else {