Browse Source

解决sip通话模式下接通瞬间会有电流噪音问题

weizhengliang 1 năm trước cách đây
mục cha
commit
a7ffd8af86

+ 11 - 21
conversion_box/src/main/java/com/wdkl/app/ncs/conversion_box/activity/MainActivity.kt

@@ -922,7 +922,7 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
                         } else if (Constant.CALL_STATE == Constant.CALL_INCOMING && addr.equals(curDeviceUart, true)) {
                             //分机接听
                             RingPlayHelper.stopRingTone()
-                            showCallFragment()
+                            showCallFragment(1)
                             VoiceUtil.acceptAudioCall(tid, curDeviceId, fromId, curInteractionVO!!.id)
                         } else {
                             //分机呼叫
@@ -1514,7 +1514,7 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
                             Constant.CALL_STATE = Constant.CALL_INCOMING
                             if (Constant.autoAnswer) {
                                 //自动接听
-                                showCallFragment()
+                                showCallFragment(1)
                                 VoiceUtil.acceptAudioCall(tid, tcpModel.toId, fromId, interactionVO?.id)
                             } else {
                                 //响铃并手动接听
@@ -1530,7 +1530,7 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
                             curInteractionVO = interactionVO
                             curDeviceId = interactionVO.fromDeviceId
                             targetSip = interactionVO.toSipId
-                            showCallFragment()
+                            showCallFragment(0)
 
                             //从呼叫列表移除
                             //outCallList.remove(interactionVO.fromEthIp.toUpperCase(Locale.ROOT))
@@ -1540,16 +1540,6 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
                             if (!TextUtils.isEmpty(doorAddr)) {
                                 SerialPortHelper.closeDoorLight(doorAddr)
                             }
-
-                            if (SettingConfig.getSipEnabled(activity)) {
-                                if (TextUtils.isEmpty(targetSip)) {
-                                    //通话失败,重置并返回主界面
-                                    showMessage("targetSipId为空!")
-                                    handoffCall()
-                                } else {
-                                    linphoneManager?.startCall(targetSip, false)
-                                }
-                            }
                         } else if (tcpModel.getAction() == TcpAction.VoiceAction.SUCCESS) {
                             //呼叫成功
                             val interactionVO = Gson().fromJson(tcpModel.data.toString(), InteractionVO::class.java)
@@ -1727,7 +1717,7 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
                                 //outCallList.remove(ethMac.toUpperCase(Locale.ROOT))
                             }
                             RingPlayHelper.stopRingTone()
-                            showCallFragment()
+                            showCallFragment(1)
                             VoiceUtil.acceptAudioCall(tid, curDeviceId, fromId, curInteractionVO!!.id)
                         } else if (tcpModel.action == TcpAction.VoiceAction.RS485HANDOFF) {
                             /*EventBus.getDefault().post(MessageEvent("handoff", Constant.EVENT_END_CALL))
@@ -1981,21 +1971,21 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
         Constant.CALL_STATE = Constant.CALL_STANDBY
     }
 
-    private fun showCallFragment() {
+    private fun showCallFragment(callState: Int) {
         //模拟分机呼叫特殊性,所有呼叫都是通过转换盒,但是转换盒只有一台,同一时间只能建立一个呼叫,为保证其他分机也能呼叫(不是通话),
         //所有模拟分机的通话都由对方来创建room,然后转换盒加入room来通话,所以房间id都是对方的,转换盒是被动加入通话
         if (callFragment == null) {
             if (SettingConfig.getSipEnabled(activity)) {
-                var fragment = SipCallFragment()
-                var bundle = Bundle()
-                bundle.putInt("call_state", 1)
+                val fragment = SipCallFragment()
+                val bundle = Bundle()
+                bundle.putInt("call_state", callState)
                 bundle.putBoolean("audio_only", true)
-                bundle.putString("tcp_tid", tid)
+                bundle.putString("targetSip", targetSip)
                 fragment.arguments = bundle
                 addCallFragment(fragment)
             } else {
-                var fragment = CallFragment()
-                var bundle = Bundle()
+                val fragment = CallFragment()
+                val bundle = Bundle()
                 bundle.putInt("call_state", 1)
                 bundle.putBoolean("audio_only", true)
                 bundle.putString("targetSip", targetSip)

+ 12 - 3
conversion_box/src/main/java/com/wdkl/app/ncs/conversion_box/fragment/CallFragment.kt

@@ -4,6 +4,7 @@ import android.os.Bundle
 import android.os.Handler
 import android.os.Looper
 import android.support.v4.app.Fragment
+import android.text.TextUtils
 import android.util.Log
 import android.view.LayoutInflater
 import android.view.View
@@ -84,9 +85,17 @@ class CallFragment: Fragment(), CallSessionCallback {
             room = Room(Constant.SIP_ID.toBigInteger())
         } else if (callState == 1) {
             //来电
-            outGoing = false
-            janusClient!!.callState = EnumType.CallState.Incoming
-            room = Room(targetSip.toBigInteger())
+            if (TextUtils.isEmpty(targetSip)) {
+                showMessage("targetSipId为空!")
+                Log.e(TAG, "target sip id is null")
+                if (activity != null) {
+                    (activity as MainActivity).handoffCall()
+                }
+            } else {
+                outGoing = false
+                janusClient!!.callState = EnumType.CallState.Incoming
+                room = Room(targetSip.toBigInteger())
+            }
         }
 
         Constant.CALL_STATE = Constant.CALL_CALLING

+ 21 - 0
conversion_box/src/main/java/com/wdkl/app/ncs/conversion_box/fragment/SipCallFragment.kt

@@ -2,6 +2,7 @@ package com.wdkl.app.ncs.conversion_box.fragment
 
 import android.os.*
 import android.support.v4.app.Fragment
+import android.text.TextUtils
 import android.util.Log
 import android.view.LayoutInflater
 import android.view.View
@@ -11,6 +12,7 @@ import com.wdkl.app.ncs.conversion_box.R
 import com.wdkl.app.ncs.conversion_box.activity.MainActivity
 import com.wdkl.app.ncs.conversion_box.helper.RingPlayHelper
 import com.wdkl.ncs.android.lib.base.BaseApplication
+import com.wdkl.ncs.android.lib.utils.showMessage
 import com.wdkl.ncs.android.middleware.common.Constant
 import com.wdkl.ncs.android.middleware.common.MessageEvent
 import com.wdkl.ncs.host.sip.core.LinphoneManager
@@ -31,6 +33,7 @@ class SipCallFragment: Fragment() {
     //通话状态:0-去电, 1-来电
     protected var callState : Int = 0
     protected var onlyAudio: Boolean = true
+    private var targetSip = ""
 
     private var linphoneManager: LinphoneManager? = null
 
@@ -40,6 +43,7 @@ class SipCallFragment: Fragment() {
 
         callState = arguments.getInt("call_state")
         onlyAudio = arguments.getBoolean("audio_only")
+        targetSip = arguments.getString("targetSip", "")
     }
 
     override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
@@ -69,6 +73,22 @@ class SipCallFragment: Fragment() {
         if (activity != null) {
             (activity as MainActivity).openCall()
         }
+
+        if (callState == 0) {
+            //去电
+            if (TextUtils.isEmpty(targetSip)) {
+                showMessage("targetSipId为空!")
+                Log.e(TAG, "target sip id is null")
+                if (activity != null) {
+                    (activity as MainActivity).handoffCall()
+                }
+            } else {
+                handler.postDelayed({
+                    RingPlayHelper.stopRingTone()
+                    linphoneManager?.startCall(targetSip, false)
+                }, 1000)
+            }
+        }
     }
 
     override fun onStart() {
@@ -97,6 +117,7 @@ class SipCallFragment: Fragment() {
     private fun callEnd() {
         Log.e(TAG, ">>>>>>>>>>> call end !!!!!!!!!!!!!!!!!!")
         RingPlayHelper.stopRingTone()
+        targetSip = ""
 
         synchronized(this) {
             if (callEnded) {