2
0
Эх сурвалжийг харах

使用 voipService 来管理悬浮窗

imndx 4 сар өмнө
parent
commit
bb16bfba33

+ 2 - 1
uni-Android-SDK/app/src/main/AndroidManifest.xml

@@ -33,8 +33,9 @@
     <uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
 
     <!-- 音视频通话时, 允许普通电话打断音视频通话 -->
-    <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
+<!--    <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />-->
     <!-- 野火sdk end -->
+    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
 
     <application
         android:name="io.dcloud.application.DCloudApplication"

+ 7 - 4
uni-Android-SDK/uni-av-module/src/main/java/cn/wildfirechat/uni/av/AVEngineKitModule.java

@@ -56,8 +56,6 @@ public class AVEngineKitModule extends UniModule implements ComponentObserver, O
         AVEngineKit.init(uniSDKInstance.getContext(), AVEngineCallbackWrapper.INSTANCE);
         AVEngineKit.DISABLE_SURFACE_VIEW_AUTO_OVERLAY = true;
         AVEngineKit.SCREEN_SHARING_REPLACE_MODE = true;
-
-        VoipFloatingWindowManager.getInstance().init(uniSDKInstance.getContext(), this);
     }
 
     /**
@@ -80,7 +78,7 @@ public class AVEngineKitModule extends UniModule implements ComponentObserver, O
                 intent.putExtra("screenShare", true);
                 intent.putExtra("data", data);
                 VoipCallService.start(context, intent);
-                // 开始屏幕共享是,voip最小化
+                //TODO 开始屏幕共享时,voip最小化
             } else {
                 Toast.makeText(mUniSDKInstance.getContext(), "请授予录制屏幕权限", Toast.LENGTH_SHORT).show();
             }
@@ -431,7 +429,12 @@ public class AVEngineKitModule extends UniModule implements ComponentObserver, O
     public void minimize(String callId, String focusVideoUser) {
         AVEngineKit.CallSession session = AVEngineKit.Instance().getCurrentSession();
         if (session != null) {
-            VoipFloatingWindowManager.getInstance().showFloatingWindow(session, focusVideoUser);
+            VoipCallService.onVoipFloatingWindowClickListener = this;
+            Context context = uniSDKInstance.getContext();
+            Intent intent = new Intent(context, VoipCallService.class);
+            intent.putExtra("showFloatingView", true);
+            VoipCallService.start(context, intent);
+//            VoipFloatingWindowManager.getInstance().showFloatingWindow(session, focusVideoUser);
         }
     }
 

+ 0 - 1
uni-Android-SDK/uni-av-module/src/main/java/cn/wildfirechat/uni/av/CallSessionCallbackWrapper.java

@@ -17,7 +17,6 @@ public class CallSessionCallbackWrapper implements AVEngineKit.CallSessionCallba
     @Override
     public void didCallEndWithReason(AVEngineKit.CallEndReason callEndReason) {
         AVEngineKitModule.fireCallSessionEvent2js("didCallEndWithReason", callEndReason);
-        VoipFloatingWindowManager.getInstance().hideFloatWindow();
     }
 
     @Override

+ 24 - 14
uni-Android-SDK/uni-av-module/src/main/java/cn/wildfirechat/uni/av/VoipCallService.java

@@ -59,6 +59,7 @@ public class VoipCallService extends Service implements OnReceiveMessageListener
     private String focusTargetId;
 
     private final Handler handler = new Handler();
+    static OnVoipFloatingWindowClickListener onVoipFloatingWindowClickListener;
 
     @Override
     public void onCreate() {
@@ -228,20 +229,24 @@ public class VoipCallService extends Service implements OnReceiveMessageListener
 
         String title = "音视频通话";
         if (session != null) {
-//            switch (session.getState()) {
-//                case Outgoing:
-//                    title = getString(R.string.call_waiting_for_answer);
-//                    break;
-//                case Incoming:
-//                    title = getString(R.string.call_invitation);
-//                    break;
-//                case Connecting:
-//                    title = getString(R.string.call_connecting);
-//                    break;
-//                default:
-//                    title = getString(R.string.call_in_progress);
-//                    break;
-//            }
+            switch (session.getState()) {
+                case Outgoing:
+                    //title = getString(R.string.call_waiting_for_answer);
+                    title = "等待接听";
+                    break;
+                case Incoming:
+                    //title = getString(R.string.call_invitation);
+                    title = "等待接听";
+                    break;
+                case Connecting:
+                    //title = getString(R.string.call_connecting);
+                    title = "接听中";
+                    break;
+                default:
+                    //title = getString(R.string.call_in_progress);
+                    title = "音视频通话中...";
+                    break;
+            }
         } else {
             title = "VOIP...";
         }
@@ -262,6 +267,7 @@ public class VoipCallService extends Service implements OnReceiveMessageListener
 
         NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
         notificationManager.cancel(NOTIFICATION_ID);
+        onVoipFloatingWindowClickListener = null;
     }
 
     private void showFloatingWindow(AVEngineKit.CallSession session) {
@@ -483,6 +489,10 @@ public class VoipCallService extends Service implements OnReceiveMessageListener
         }
         showFloatingWindow = false;
         startActivity(resumeActivityIntent);
+        if (onVoipFloatingWindowClickListener != null) {
+            onVoipFloatingWindowClickListener.onClickFloatingWindow();
+        }
+        hideFloatBox();
     }
 
     private void broadcastCallOngoing(AVEngineKit.CallSession callSession) {