Переглянути джерело

1.正在通话中时,修改入住信息时分机和主机会有杂音,是因为重新刷新数据时下发了串口指令
2.通话建立时超时未接通则重置状态

weizhengliang 3 роки тому
батько
коміт
9c418845a4

+ 27 - 6
conversion_box/src/main/java/com/wdkl/app/ncs/conversion_box/activity/MainActivity.kt

@@ -340,9 +340,11 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
         if (Constant.DEVICE_STATUS == 1) {
             connectSocket()
             tv_device_status.setText("设备状态: 已启用")
-            SerialPortHelper.changeRegisterState()
-            SerialPortHelper.changeCallingMode("0") //双工模式
-            isMacRegister = true
+            if (!isMacRegister) {
+                isMacRegister = true
+                SerialPortHelper.changeRegisterState()
+                SerialPortHelper.changeCallingMode("0") //双工模式
+            }
         } else {
             tv_device_status.setText("设备状态: 未注册或未启用")
         }
@@ -510,6 +512,7 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
                             //分机接听
                             RingPlayHelper.stopRingTone()
                             VoiceUtil.acceptAudioCall(curDeviceId, fromId, curInteractionVO!!.id)
+                            checkCallSuccess()
                         } else {
                             //分机呼叫
                             if (curInteractionVO == null) {
@@ -607,6 +610,22 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
         }
     }
 
+    //分机接听后检查通话是否正常连接上
+    private fun checkCallSuccess() {
+        //3s还未连接上则判定为通话失败
+        Handler().postDelayed({
+            val session = gEngineKit!!.currentSession
+            if (session != null && session.state == EnumType.CallState.Connected) {
+                //连接通话成功
+            } else {
+                if (!callEnded) {
+                    showMessage("通话连接失败,通话结束")
+                    callEnd()
+                }
+            }
+        }, 3000)
+    }
+
     private fun startCall(uart: String) {
         if (SocketManager.getInstance().socketOpen() && Constant.TCP_CONNECTED) {
             //通过串口地址查找到对应分机设备id
@@ -870,6 +889,7 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
                             if (Constant.autoAnswer) {
                                 //自动接听
                                 VoiceUtil.acceptAudioCall(tcpModel.toId, fromId, interactionVO?.id)
+                                checkCallSuccess()
                             } else {
                                 //响铃并手动接听
                                 SerialPortHelper.callInChannel(curDeviceUart)
@@ -894,6 +914,8 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
                                     fromId,
                                     curInteractionVO!!.id
                                 )
+                            } else {
+                                checkCallSuccess()
                             }
                             //关闭门灯
                             val doorAddr = getDoorLightAddr(curDeviceUart)
@@ -1006,6 +1028,7 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
                         } else if (tcpModel.action == TcpAction.VoiceAction.RS485ACCEPT) {
                             RingPlayHelper.stopRingTone()
                             VoiceUtil.acceptAudioCall(curDeviceId, fromId, curInteractionVO!!.id)
+                            checkCallSuccess()
                         } else if (tcpModel.action == TcpAction.VoiceAction.RS485HANDOFF) {
                             gEngineKit!!.endCall()
                             Constant.CALL_STATE = Constant.CALL_STANDBY
@@ -1029,9 +1052,7 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
                             if (Constant.PART_ID != null) {
                                 presenter.loadPartSettings(Constant.PART_ID)
                             }
-                        } else if (tcpModel.action == TcpAction.DeviceAction.DEVICE_REFRESH) {
-                            initDevice()
-                        } else if (tcpModel.action == TcpAction.DeviceAction.RESTART) {
+                        } else if (tcpModel.action == TcpAction.DeviceAction.DEVICE_REFRESH || tcpModel.action == TcpAction.DeviceAction.RESTART) {
                             //收到重启app指令,若当前处于正常待机状态则直接重启app,否则等待通话结束再重启
                             if (Constant.CALL_STATE == Constant.CALL_STANDBY) {
                                 AppUpdateHelper.restartApp(activity)