Parcourir la source

webrtc通话耳机模式监听

weizhengliang il y a 6 mois
Parent
commit
bc043dcc63

+ 28 - 6
android_mobile/src/main/yd_w_xiaomi_2/code/com/wdkl/ncs/android/component/home/service/WdKeepAliveService.kt

@@ -1,10 +1,7 @@
 package com.wdkl.ncs.android.component.home.service
 
 import android.annotation.SuppressLint
-import android.content.ComponentName
-import android.content.Context
-import android.content.Intent
-import android.content.IntentFilter
+import android.content.*
 import android.content.pm.PackageManager
 import android.net.wifi.WifiManager
 import android.os.*
@@ -14,7 +11,6 @@ import android.util.Log
 import android.view.KeyEvent
 import com.alibaba.fastjson.JSON
 import com.alibaba.fastjson.JSONObject
-import com.google.common.base.Strings
 import com.google.gson.FieldNamingPolicy
 import com.google.gson.Gson
 import com.google.gson.GsonBuilder
@@ -38,7 +34,6 @@ import com.wdkl.ncs.android.middleware.common.Constants
 import com.wdkl.ncs.android.middleware.model.dos.ChannelImDO
 import com.wdkl.ncs.android.middleware.model.dos.PartSettingDO
 import com.wdkl.ncs.android.middleware.model.vo.InteractionVO
-import com.wdkl.ncs.android.middleware.model.vo.WatchContactVO
 import com.wdkl.ncs.android.middleware.tcp.TcpClient
 import com.wdkl.ncs.android.middleware.tcp.TcpClientHandler
 import com.wdkl.ncs.android.middleware.tcp.channel.ChannelImUtil
@@ -81,6 +76,8 @@ class WdKeepAliveService : AbsWorkService() {
     private var netWorkChangeReceiver: NetWorkChangeReceiver? = null
     lateinit var mVibrator: Vibrator
 
+    private var headsetPlugReceiver: HeadsetPlugReceiver? = null
+
     private lateinit var receiver: PhoneStateReceiver
     private var executor: ScheduledExecutorService? = null
 
@@ -133,6 +130,11 @@ class WdKeepAliveService : AbsWorkService() {
         netWorkChangeReceiver = NetWorkChangeReceiver()
         registerReceiver(netWorkChangeReceiver, intentFilter)
 
+        headsetPlugReceiver = HeadsetPlugReceiver()
+        val filter = IntentFilter()
+        filter.addAction(Intent.ACTION_HEADSET_PLUG)
+        registerReceiver(headsetPlugReceiver, filter)
+
         checkNetState()
 
         //初始化TTS服务
@@ -243,6 +245,11 @@ class WdKeepAliveService : AbsWorkService() {
 
             }
         }
+
+        if (headsetPlugReceiver != null) {
+            unregisterReceiver(headsetPlugReceiver)
+        }
+
         if (executor != null) {
             executor!!.shutdownNow()
         }
@@ -1193,4 +1200,19 @@ class WdKeepAliveService : AbsWorkService() {
             }
         }
     }
+
+
+    inner class HeadsetPlugReceiver : BroadcastReceiver() {
+        override fun onReceive(context: Context, intent: Intent) {
+            if (intent.hasExtra("state")) {
+                val state = intent.getIntExtra("state", 0)
+                Log.e(TAG, "headset state: " + state)
+                if (state == 0) { //拔出耳机
+                    VoiceManagerUtil.setSpeakerOn(BaseApplication.appContext, true)
+                } else if (state == 1) { //插入耳机
+                    VoiceManagerUtil.setSpeakerOn(BaseApplication.appContext, false)
+                }
+            }
+        }
+    }
 }

+ 1 - 1
janus/src/main/java/com/wdkl/rtc/janus/JanusClient.java

@@ -123,8 +123,8 @@ public class JanusClient implements WebSocketChannel.WebSocketCallback {
         if (webSocketChannel != null) {
             Log.d(TAG,"关闭ws");
             try {
-                webSocketChannel.close();
                 WebRTCEngine.getInstance().release();
+                webSocketChannel.close();
             }catch (Exception ex){
                 Log.e(TAG,ex.toString());
             }

+ 6 - 2
janus/src/main/java/com/wdkl/rtc/rtc/WebRTCEngine.java

@@ -406,6 +406,8 @@ public class WebRTCEngine {
         this.mIsAudioOnly = mIsAudioOnly;
         this.mContext = mContext;
         audioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
+        //audioFocusManager = new AudioFocusManager(audioManager);
+        //audioFocusManager.requestFocus();
 
         if (mRootEglBase == null) {
             mRootEglBase = EglBase.create();
@@ -571,6 +573,7 @@ public class WebRTCEngine {
      */
     public boolean toggleHeadset(boolean isHeadset) {
         if (audioManager != null) {
+            Log.e(TAG, "toggle headset: " + isHeadset);
             if (isHeadset) {
                 //5.0以上
                 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
@@ -678,14 +681,15 @@ public class WebRTCEngine {
 
     public void release() {
         if (audioManager != null) {
-            audioManager.setMode(AudioManager.MODE_NORMAL);
-            audioManager.setSpeakerphoneOn(true);
+            //audioManager.setMode(AudioManager.MODE_NORMAL);
+            //audioManager.setSpeakerphoneOn(true);
 
             if (isBluetoothHeadsetConnected()) {
                 audioManager.stopBluetoothSco();
                 audioManager.setBluetoothScoOn(false);
             }
         }
+
         if (audioFocusManager!=null){
             audioFocusManager.releaseAudioFocus();
         }