Kaynağa Gözat

通话过程中如果有其他分机呼叫时点亮门灯会有噪音干扰,修改为通话过程不点亮门灯,通话结束之后再点亮

weizhengliang 3 yıl önce
ebeveyn
işleme
b87e379bd5

+ 102 - 9
conversion_box/src/main/java/com/wdkl/app/ncs/conversion_box/activity/MainActivity.kt

@@ -52,6 +52,7 @@ import com.wdkl.ncs.android.middleware.tcp.enums.TcpType
 import com.wdkl.ncs.android.middleware.udp.ServerInfoUtil
 import com.wdkl.ncs.android.middleware.utils.AppUtil
 import com.wdkl.ncs.android.middleware.utils.CommonUtils
+import com.wdkl.ncs.janus.rtc.WebRTCEngine
 import com.wdkl.ncs.janus.util.JanusConstant
 import kotlinx.android.synthetic.main.conversion_box_main_lay.*
 import kotlinx.android.synthetic.main.main_activity_layout.*
@@ -117,6 +118,10 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
 
     private var sosList = ArrayList<SosItem>()
     private var outCallList = ArrayList<String>()
+    //通话时需要开启的门灯
+    private var doorOnList = ArrayList<String>()
+    //通话时需要关闭的门灯
+    private var doorOffList = ArrayList<String>()
 
     private var serverIp = ""
 
@@ -789,9 +794,31 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
         //Log.d("onSerialPortData", " rs485 data: $hexStr")
     }
 
+    private val runnable = Runnable {
+        if (Constant.CALL_STATE == Constant.CALL_CALLING) {
+            WebRTCEngine.getInstance().muteAudio(false)
+        }
+    }
+
     //串口处理
     override fun serialPortBedOnclick(str: String) {
         try {
+            if (Constant.calling) {
+                //正在通话中,先静音然后再开启,防止噪音
+                WebRTCEngine.getInstance().muteAudio(true)
+                //handler.removeCallbacks(runnable)
+                //handler.postDelayed(runnable, 300)
+                handler.postDelayed({
+                    if (Constant.calling) {
+                        WebRTCEngine.getInstance().muteAudio(false)
+                    }
+                }, 300)
+            }
+        } catch (ex: Exception) {
+            ex.printStackTrace()
+        }
+
+        try {
             val newStr: String = CutSerialPortUtil.delHeadAndEnd(str, "$", "#")
             val content = newStr.split(",").toTypedArray()
             Log.d("serialPortBedOnclick", "newStr==$newStr")
@@ -830,18 +857,21 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
 
                                 handoffCall()
                             } else {
-                                cancelOutCall(addr, false)
+                                //cancelOutCall(addr, false)
+                                cancelCall(addr, false)
                             }
                         } else if (Constant.CALL_STATE == Constant.CALL_INCOMING) {
                             if (addr.equals(curDeviceUart, true)) {
                                 rejectCall()
-                                SerialPortHelper.closeSoundChannel(addr)
+                                //SerialPortHelper.closeSoundChannel(addr)
                                 RingPlayHelper.stopRingTone()
                             } else {
-                                cancelOutCall(addr, false)
+                                //cancelOutCall(addr, false)
+                                cancelCall(addr, false)
                             }
                         } else {
-                            cancelOutCall(addr, true)
+                            //cancelOutCall(addr, true)
+                            cancelCall(addr, true)
                         }
 
                         //关闭门灯
@@ -994,6 +1024,34 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
         //关闭门灯
         val doorAddr = getDoorLightAddr(uart)
         if (!TextUtils.isEmpty(doorAddr)) {
+            if (Constant.calling) {
+                doorOffList.add(doorAddr!!)
+            } else {
+                SerialPortHelper.closeDoorLight(doorAddr)
+            }
+        }
+    }
+
+    private fun cancelCall(uart: String, resetCall: Boolean) {
+        if (FrameHelper.frameDeviceList.size > 0 ) {
+            for (frameDevice in FrameHelper.frameDeviceList) {
+                if (frameDevice.device != null && uart.equals(frameDevice.device.ethMac, true)) {
+                    updateCallText("待机中")
+                    VoiceUtil.cancelAudioCall(frameDevice.device.id)
+                    if (resetCall) {
+                        Constant.CALL_STATE = Constant.CALL_STANDBY
+                    }
+                    break
+                }
+            }
+        }
+
+        //SerialPortHelper.closeSoundChannel(uart)
+        //关闭门灯
+        val doorAddr = getDoorLightAddr(uart)
+        if (Constant.calling) {
+            doorOffList.add(doorAddr!!)
+        } else {
             SerialPortHelper.closeDoorLight(doorAddr)
         }
     }
@@ -1233,6 +1291,34 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
         Constant.CALL_STATE = Constant.CALL_STANDBY
     }
 
+    private fun checkDoorLight() {
+        if (doorOnList.size > 0) {
+            for (addr in doorOnList) {
+                Log.d("door", "111doorOn light addr: $addr")
+                if (doorOffList.contains(addr)) {
+                    doorOffList.remove(addr)
+                    break
+                }
+                Log.d("door", "222doorOn light addr: $addr")
+                if (Constant.colorLight) {
+                    SerialPortHelper.openDoorLightGreen(addr)
+                } else {
+                    SerialPortHelper.openDoorLightRed(addr)
+                }
+            }
+        }
+
+        if (doorOffList.size > 0) {
+            for (addr in doorOffList) {
+                Log.d("door", "doorOff light addr: $addr")
+                SerialPortHelper.closeDoorLight(addr)
+            }
+        }
+
+        doorOnList.clear()
+        doorOffList.clear()
+    }
+
     private fun updateCallText(str: String) {
         runOnUiThread {
             tv_call_state.setText("呼叫状态: " + str)
@@ -1327,10 +1413,10 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
                             targetSip = interactionVO.fromSipId
 
                             //关闭门灯
-                            val doorAddr = getDoorLightAddr(curDeviceUart)
+                            /*val doorAddr = getDoorLightAddr(curDeviceUart)
                             if (!TextUtils.isEmpty(doorAddr)) {
                                 SerialPortHelper.closeDoorLight(doorAddr)
-                            }
+                            }*/
 
                             updateCallText("收到来电")
                             Constant.CALL_STATE = Constant.CALL_INCOMING
@@ -1383,10 +1469,14 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
                             //开启门灯
                             val doorAddr = getDoorLightAddr(interactionVO.fromEthMac.toUpperCase(Locale.ROOT))
                             if (!TextUtils.isEmpty(doorAddr)) {
-                                if (Constant.colorLight) {
-                                    SerialPortHelper.openDoorLightGreen(doorAddr)
+                                if (Constant.calling) {
+                                    doorOnList.add(doorAddr!!)
                                 } else {
-                                    SerialPortHelper.openDoorLightRed(doorAddr)
+                                    if (Constant.colorLight) {
+                                        SerialPortHelper.openDoorLightGreen(doorAddr)
+                                    } else {
+                                        SerialPortHelper.openDoorLightRed(doorAddr)
+                                    }
                                 }
                             }
                         } else if (tcpModel.getAction() == TcpAction.VoiceAction.REJECT) {
@@ -1613,6 +1703,9 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
                 //VoiceUtil.handoffAudioCall(curDeviceId, fromId, curInteractionVO!!.id)
 
                 removeCallFragment()
+                AppTool.Time.delay(1500) {
+                    checkDoorLight()
+                }
             }
         }
     }

+ 18 - 0
conversion_box/src/main/java/com/wdkl/app/ncs/conversion_box/activity/OfflineMainActivity.kt

@@ -339,6 +339,24 @@ class OfflineMainActivity :BaseActivity<MainActivityPresenter, OfflineMainActivi
 
     //串口处理
     override fun serialPortBedOnclick(str: String) {
+        /*try {
+            if (Constant.CALL_STATE == Constant.CALL_CALLING) {
+                //正在通话中,先静音然后再开启,防止噪音
+                if (SkyEngineKit.Instance() != null && SkyEngineKit.Instance().currentSession != null) {
+                    SkyEngineKit.Instance().currentSession.toggleMuteAudio(true)
+                }
+                handler.postDelayed({
+                    if (Constant.CALL_STATE == Constant.CALL_CALLING) {
+                        if (SkyEngineKit.Instance() != null && SkyEngineKit.Instance().currentSession != null) {
+                            SkyEngineKit.Instance().currentSession.toggleMuteAudio(false)
+                        }
+                    }
+                }, 800)
+            }
+        } catch (ex: Exception) {
+            ex.printStackTrace()
+        }*/
+
         try {
             val newStr: String = CutSerialPortUtil.delHeadAndEnd(str, "$", "#")
             val content = newStr.split(",").toTypedArray()

+ 4 - 1
conversion_box/src/main/java/com/wdkl/app/ncs/conversion_box/fragment/CallFragment.kt

@@ -75,6 +75,8 @@ class CallFragment: Fragment(), CallSessionCallback {
         WebRTCEngine.getInstance().init(true, this.context)
         //初始化 janusClient
         janusClient = JanusClient(JanusConstant.JANUS_URL, Constant.SIP_ID.toBigInteger())
+        WebRTCEngine.getInstance().muteAudio(false)
+        Constant.calling = true
 
         if (callState == 0) {
             //去电
@@ -235,6 +237,8 @@ class CallFragment: Fragment(), CallSessionCallback {
 
     //通话结束
     private fun callEnd() {
+        Constant.calling = false
+        Constant.CALL_STATE = Constant.CALL_STANDBY
         if (callEnded) {
             return
         }
@@ -254,7 +258,6 @@ class CallFragment: Fragment(), CallSessionCallback {
         }
 
         targetSip = ""
-        Constant.CALL_STATE = Constant.CALL_STANDBY
 
         backToMain()
     }

+ 2 - 1
conversion_box/src/main/java/com/wdkl/app/ncs/conversion_box/fragment/SipCallFragment.kt

@@ -244,6 +244,8 @@ class SipCallFragment: Fragment(), CallSession.CallSessionCallback {
             SerialPortHelper.closeSoundChannel(uartAddr)
         }
 
+        Constant.CALL_STATE = Constant.CALL_STANDBY
+
         if (callEnded) {
             return
         }
@@ -256,7 +258,6 @@ class SipCallFragment: Fragment(), CallSession.CallSessionCallback {
         }
 
         targetSip = ""
-        Constant.CALL_STATE = Constant.CALL_STANDBY
 
         backToMain()
     }

+ 2 - 0
middleware/src/main/code/com/wdkl/ncs/android/middleware/common/Constant.java

@@ -47,6 +47,8 @@ public class Constant {
     //通话状态
     public static int CALL_STATE = CALL_STANDBY;
 
+    public static boolean calling = false;
+
     //佛山项目开启自动接听
     public static boolean autoAnswer = false;
     public static boolean colorLight = false;