Selaa lähdekoodia

优化通话异常处理

weizhengliang 3 vuotta sitten
vanhempi
commit
e70bdfc9b1

+ 0 - 4
nursehome/src/main/java/com/wdkl/ncs/android/component/nursehome/activity/NurseHomeActivity.kt

@@ -789,8 +789,6 @@ class NurseHomeActivity  : BaseActivity<NurseHomeActivityPresenter, ActivityNurs
             var bundle = Bundle()
             bundle.putBoolean("audio_only", false)
             bundle.putInt("call_state", 0)
-            bundle.putInt("fromId", Constants.fromId!!)
-            bundle.putInt("interactionId",  Constants.interactionId!!)
             bundle.putString("targetId", targetId)
             bundle.putBoolean("visiting", true)
             fragment.arguments = bundle
@@ -882,8 +880,6 @@ class NurseHomeActivity  : BaseActivity<NurseHomeActivityPresenter, ActivityNurs
                             var bundle = Bundle()
                             bundle.putBoolean("audio_only", Constants.call_type == 0)
                             bundle.putInt("call_state", 0)
-                            bundle.putInt("fromId", tcpModel.fromId)
-                            bundle.putInt("interactionId", interactionVO.id)
                             bundle.putBoolean("visiting", false)
                             bundle.putString("targetId", interactionVO.toSipId)
                             fragment.arguments = bundle

+ 2 - 5
nursehome/src/main/java/com/wdkl/ncs/android/component/nursehome/fragment/BaseCallFragment.kt

@@ -24,9 +24,7 @@ abstract class BaseCallFragment: Fragment() {
     //通话状态:0-去电, 1-来电
     protected var callState : Int = 0
     protected var onlyAudio: Boolean = true
-    //来电设备id
-    protected var fromId: Int = -1
-    protected var interactionId: Int? = -1
+
     protected var targetId: String? = null
     //是否探视
     protected var visiting: Boolean = false
@@ -43,8 +41,7 @@ abstract class BaseCallFragment: Fragment() {
         } else {
             onlyAudio = true
         }
-        fromId = arguments.getInt("fromId")
-        interactionId = arguments.getInt("interactionId")
+
         targetId = arguments.getString("targetId")
         visiting = arguments.getBoolean("visiting")
 

+ 2 - 2
nursehome/src/main/java/com/wdkl/ncs/android/component/nursehome/fragment/FramePartFragment.kt

@@ -192,7 +192,7 @@ class FramePartFragment: BaseFragment<FramePartPresenter, FragmentFramePartBindi
             //语音呼叫
             if (frame.customerName != null && frame.bedDeviceId != null) {
                 //通话之前先判断webrtc socket是否连接上,否则不能建立通话
-                if (SocketManager.getInstance().socketOpen() || Constants.tcp_connected) {
+                if (SocketManager.getInstance().socketOpen() && Constants.tcp_connected) {
                     VoiceUtil.startAudioCall(Constants.ids, frame.bedDeviceId)
                     Constants.call_type = 0
                 } else {
@@ -212,7 +212,7 @@ class FramePartFragment: BaseFragment<FramePartPresenter, FragmentFramePartBindi
             //视频呼叫
             if (frame.customerName != null) {
                 //通话之前先判断webrtc socket是否连接上,否则不能建立通话
-                if (SocketManager.getInstance().socketOpen() || Constants.tcp_connected) {
+                if (SocketManager.getInstance().socketOpen() && Constants.tcp_connected) {
                     VoiceUtil.startAudioCall(Constants.ids, frame.bedDeviceId)
                     Constants.call_type = 1
                 } else {

+ 12 - 7
nursehome/src/main/java/com/wdkl/ncs/android/component/nursehome/fragment/SkyCallFragment.kt

@@ -3,6 +3,7 @@ package com.wdkl.ncs.android.component.nursehome.fragment
 import android.os.Handler
 import android.os.Looper
 import android.os.SystemClock
+import android.text.TextUtils
 import android.util.Log
 import android.view.View
 import android.view.ViewGroup
@@ -69,13 +70,15 @@ class SkyCallFragment: BaseCallFragment(), CallSession.CallSessionCallback {
         when (callState) {
             0 -> {
                 //发起通话
+                Log.d("dds", "out call targetId: $targetId")
                 outGoing = true
-                if (targetId == null || !startCall(targetId!!, onlyAudio)) {
+                if (TextUtils.isEmpty(targetId) || !startCall(targetId!!, onlyAudio)) {
                     //通话失败,重置并返回主界面
-                    showMessage("创建通话失败!")
+                    outGoing = false
+                    showMessage("创建通话失败,可能targetId为空或通话服务异常!")
                     Constants.CALL_STATE = Constants.CALL_STANDBY
                     DeviceChannel.calling = false
-                    VoiceUtil.handoffAudioCall(Constants.ids, fromId, interactionId)
+                    VoiceUtil.rejectAudioCall(Constants.ids, Constants.fromId, Constants.interactionId)
                     if (sky_voice_call_timer != null) {
                         sky_voice_call_timer.stop()
                     }
@@ -136,7 +139,7 @@ class SkyCallFragment: BaseCallFragment(), CallSession.CallSessionCallback {
 
             Constants.CALL_STATE = Constants.CALL_STANDBY
             DeviceChannel.calling = false
-            VoiceUtil.handoffAudioCall(Constants.ids, fromId, interactionId)
+            //VoiceUtil.handoffAudioCall(Constants.ids, Constants.fromId, Constants.interactionId)
             //sky_voice_call_timer.stop()
         }
     }
@@ -283,15 +286,17 @@ class SkyCallFragment: BaseCallFragment(), CallSession.CallSessionCallback {
         }
         callEnded = true
 
-        Constants.CALL_STATE = Constants.CALL_STANDBY
-        DeviceChannel.calling = false
-
         if (sky_voice_call_timer != null) {
             sky_voice_call_timer.stop()
         }
         if (gEngineKit != null && gEngineKit!!.currentSession != null && gEngineKit!!.currentSession.state != EnumType.CallState.Idle) {
             gEngineKit!!.endCall()
         }
+
+        Constants.CALL_STATE = Constants.CALL_STANDBY
+        DeviceChannel.calling = false
+        VoiceUtil.handoffAudioCall(Constants.ids, Constants.fromId, Constants.interactionId)
+
         backToMain()
     }
 

+ 225 - 0
nursehome/src/main/java/com/wdkl/ncs/android/component/nursehome/util/MediaPlayHelper.java

@@ -0,0 +1,225 @@
+package com.wdkl.ncs.android.component.nursehome.util;
+
+import android.media.AudioManager;
+import android.media.MediaPlayer;
+import android.os.Handler;
+import android.os.HandlerThread;
+import android.os.Message;
+
+import com.wdkl.ncs.android.lib.base.BaseApplication;
+
+public class MediaPlayHelper {
+
+    private static MediaPlayHelper sInstance = null;
+    private MediaPlayer mediaPlayer;
+    private HandlerThread playHandlerThread;
+    private Handler playHandler;
+
+    private int mResId;
+    private String mUrl;
+    private float mVolume;
+    private boolean mLoop;
+
+    /**
+     * 播放res资源
+     */
+    public static final int PLAY_RES = 100;
+    /**
+     * 播放url资源
+     */
+    public static final int PLAY_URL = 101;
+    /**
+     * 停止
+     */
+    public static final int STOP = 102;
+    /**
+     * 释放
+     */
+    public static final int RELEASE = 103;
+
+
+    private MediaPlayHelper() {
+        createHandlerThread();
+    }
+
+    public static MediaPlayHelper getInstance() {
+        if (sInstance == null) {
+            synchronized (MediaPlayHelper.class) {
+                if (sInstance == null) {
+                    sInstance = new MediaPlayHelper();
+                }
+            }
+        }
+        return sInstance;
+    }
+
+    private void createHandlerThread() {
+        if (playHandlerThread == null) {
+            playHandlerThread = new HandlerThread("playHandlerThread");
+            playHandlerThread.start();
+        }
+
+        if (playHandler == null) {
+            playHandler = new Handler(playHandlerThread.getLooper()) {
+                @Override
+                public void handleMessage(Message msg) {
+                    switch (msg.what) {
+                        case PLAY_RES:
+                            playResMusicNow();
+                            break;
+                        case PLAY_URL:
+                            playUrlMusicNow();
+                            break;
+                        case STOP:
+                            stopMusicNow();
+                            break;
+                        case RELEASE:
+                            releaseMediaNow();
+                            break;
+                        default:
+                            break;
+                    }
+                }
+            };
+        }
+    }
+
+    public void playResMusic(int id, float vol, boolean loop) {
+        mResId = id;
+        mVolume = vol;
+        mLoop = loop;
+        playHandler.sendEmptyMessage(PLAY_RES);
+    }
+
+    public void playUrlMusic(String url, float vol, boolean loop) {
+        mUrl = url;
+        mVolume = vol;
+        mLoop = loop;
+        playHandler.sendEmptyMessage(PLAY_URL);
+    }
+
+    public void stopMusic() {
+        playHandler.sendEmptyMessage(STOP);
+    }
+
+    public void releaseMusic() {
+        playHandler.sendEmptyMessage(RELEASE);
+    }
+
+    //播放本地res音频资源
+    private void playResMusicNow() {
+        if (mediaPlayer != null) {
+            mediaPlayer.stop();
+            mediaPlayer.reset();
+            mediaPlayer.release();
+        }
+        mediaPlayer = MediaPlayer.create(BaseApplication.appContext, mResId);
+        try {
+            mediaPlayer.setLooping(mLoop);
+            mediaPlayer.setVolume(mVolume, mVolume);
+            mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
+            mediaPlayer.start();
+            mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
+                @Override
+                public void onCompletion(MediaPlayer player) {
+                    //playMusicComplete();
+                    //stopMusicNow();
+                }
+            });
+            mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
+                @Override
+                public boolean onError(MediaPlayer player, int what, int extra) {
+                    //playMusicError();
+                    stopMusicNow();
+                    return false;
+                }
+            });
+        } catch (Exception e) {
+            //playMusicError();
+            e.printStackTrace();
+        }
+    }
+
+    //播放远程或本地存储音频资源
+    private void playUrlMusicNow() {
+        if (mediaPlayer != null) {
+            mediaPlayer.stop();
+            mediaPlayer.reset();
+            mediaPlayer.release();
+        }
+        mediaPlayer = new MediaPlayer();
+        try {
+            mediaPlayer.reset();
+            mediaPlayer.setDataSource(mUrl);
+            mediaPlayer.setLooping(mLoop);
+            mediaPlayer.setVolume(mVolume, mVolume);
+            mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
+            mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
+                @Override
+                public void onPrepared(MediaPlayer player) {
+                    if (mediaPlayer != null) {
+                        mediaPlayer.start();
+                    }
+                }
+            });
+            mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
+                @Override
+                public void onCompletion(MediaPlayer player) {
+                    //playMusicComplete();
+                    //stopMusicNow();
+                }
+            });
+            mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
+                @Override
+                public boolean onError(MediaPlayer player, int what, int extra) {
+                    //playMusicError();
+                    stopMusicNow();
+                    return false;
+                }
+            });
+            mediaPlayer.prepareAsync();
+        } catch (Exception e) {
+            //playMusicError();
+            e.printStackTrace();
+        }
+    }
+
+    private void stopMusicNow() {
+        if (mediaPlayer != null) {
+            mediaPlayer.setOnPreparedListener(null);
+            mediaPlayer.setOnCompletionListener(null);
+            try {
+                //if (mediaPlayer.isPlaying()) {
+                    mediaPlayer.stop();
+                    mediaPlayer.reset();
+                    mediaPlayer.release();
+                //}
+            } catch (IllegalStateException e) {
+                e.printStackTrace();
+            }
+        }
+        mediaPlayer = null;
+    }
+
+    private void releaseMediaNow() {
+        if (mediaPlayer != null) {
+            mediaPlayer.setOnPreparedListener(null);
+            mediaPlayer.setOnCompletionListener(null);
+            try {
+                mediaPlayer.stop();
+                mediaPlayer.reset();
+                mediaPlayer.release();
+            } catch (IllegalStateException e) {
+                e.printStackTrace();
+            }
+        }
+        mediaPlayer = null;
+    }
+
+    public boolean isMediaPlaying() {
+        if (mediaPlayer != null) {
+            return mediaPlayer.isPlaying();
+        }
+        return false;
+    }
+}

+ 1 - 1
nursehome/src/main/res/layout/adapter_hospital_frame_part.xml

@@ -77,7 +77,7 @@
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:layout_alignParentRight="true"
-                android:text="2房"
+                android:text="-房"
                 android:textSize="14sp"
                 android:textColor="#2F9DF1"/>
 

+ 1 - 1
resource/src/main/res/values/strings.xml

@@ -1,5 +1,5 @@
 <resources>
-    <string name="javashop_app_name">NCS-护士主机</string>
+    <string name="javashop_app_name">NCS-护士主机卡尔版</string>
     <string name="javashop_qrcode_name">扫啊扫</string>
     <string name="javashop_navigation_home_title">首页</string>
     <string name="javashop_navigation_category_title">分类</string>