package com.boncfc.mgrapp.fhVideo.teller;
import android.app.Activity;
import android.app.Notification;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.RelativeLayout;
import androidx.appcompat.app.AppCompatActivity;
import com.boncfc.mgrapp.R;
import com.fhuvideo.FHLiveMacro;
import com.fhuvideo.FHLiveSessionParams;
import com.fhuvideo.FHParams;
import com.fhuvideo.adviser.FHTellerParams;
import com.fhuvideo.adviser.tool.FHAPlayer;
import com.fhuvideo.bank.FHPermission;
import com.fhuvideo.bean.FHLog;
import com.fhvideo.bankui.FHLivelisenter;
import com.fhvideo.bankui.FHVideoManager;
import com.fhvideo.bankui.bean.FHUIEvent;
import com.fhvideo.bankui.call.FHCallActivity;
import com.fhvideo.bankui.live.FHLiveActivity;
import com.fhvideo.bankui.util.ToastUtil;
import com.fhvideo.fhcommon.FHBusiCallBack;
public class MainFhActivity extends AppCompatActivity {
private static final String TAG = "MainFhActivity";
private Activity activity;
private boolean isMetting = false;
private ProgressDialog pd;
private RelativeLayout outViewGroup;
private WebView outWebView;
private Handler mHandler = new Handler();
// 状态跟踪变量(新增)
public static boolean isLiveActive = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 修改点1:设置透明背景避免白屏
getWindow().setBackgroundDrawable(null);
setContentView(new View(this));
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
activity = this;
FHLiveSessionParams.setImChannelType(FHTellerParams.TX);
setNoti();
initPD();
FHPermission.getInstance().checkPermission(activity);
login();
}
private void setNoti() {
NotifyObject notifyObject = new NotifyObject();
notifyObject.content = "投屏内容";
notifyObject.title = "投屏标题";
notifyObject.subText = "";
notifyObject.param = "";
Notification notification = NotificationUtil.createScreenNotification(getApplicationContext(), notifyObject);
//设置投屏通知
FHVideoManager.getInstance().setScreenNotification(notification);
NotifyObject LivennotifyObject = new NotifyObject();
LivennotifyObject.content = "会话内容";
LivennotifyObject.title = "会话标题";
LivennotifyObject.subText = "";
LivennotifyObject.param = "";
Notification Livenotification = NotificationUtil.createScreenNotification(getApplicationContext(), LivennotifyObject);
FHVideoManager.getInstance().setLiveForegroundNotification(Livenotification);
}
private void initPD() {
pd = new ProgressDialog(activity);
pd.setMessage("加载中...");
pd.setCanceledOnTouchOutside(false);
}
private void showPd() {
if (!pd.isShowing()) {
pd.show();
}
}
private void cancelPd() {
if (pd.isShowing())
pd.cancel();
}
private void login() {
if (!FHTellerParams.isConnected()) {
ToastUtil.getInatance(activity).show(getString(R.string.fh_not_net));
return;
}
String uid = getIntent().getStringExtra("tellerUid");
String pwd = getIntent().getStringExtra("password");
String dept = "0_2024";
String authNumber = getIntent().getStringExtra("authNumber");
if (TextUtils.isEmpty(uid) || TextUtils.isEmpty(pwd)) {
ToastUtil.getInatance(activity).show("请输入视频柜员工号和密码!");
return;
}
showPd();
FHVideoManager.getInstance().loginAutoCreate(uid, pwd, dept, authNumber, new FHBusiCallBack() {
@Override
public void onSuccess(String s) {
Log.i(TAG, "登录成功");
cancelPd();
startLiveActivity();
}
@Override
public void onError(String s) {
Log.e(TAG, "登录失败: " + s);
cancelPd();
if (!TextUtils.isEmpty(s) && (s.contains("40100") || s.contains("40024"))) {
FHVideoManager.getInstance().forceFinishLastSession(FHParams.getUid(), null);
}
ToastUtil.getInatance(activity).show(s);
finish();
}
});
}
private void startLiveActivity() {
if (FHCallActivity.isStart) return;
// 修改点3:明确状态标记
isLiveActive = true;
isMetting = true;
Log.d(TAG, "启动视频页面");
FHLiveActivity.setLiveLisenter(new FHLivelisenter() {
@Override
public void onVideoEvent(String type, String msg) {
switch (type) {
case FHTellerParams.FH_ON_START:
configOutViewGroup();
Log.d(TAG, "会话开始");
break;
case FHTellerParams.FH_VIDEO_END:
case FHTellerParams.FH_ON_QUIT:
finishCallMeeting(msg);
break;
case FHTellerParams.FH_ON_LEAVE:
minimizeAppSafely();
break;
case FHUIEvent.ONCLICK_FLOAT:
handleFloatClick();
break;
}
}
});
Intent intent = new Intent(activity, FHLiveActivity.class);
startActivity(intent);
// 修改点4:禁用跳转动画
overridePendingTransition(0, 0);
}
// 修改点5:新增安全最小化方法
private void minimizeAppSafely() {
Log.d(TAG, "执行安全最小化");
moveTaskToBack(true);
mHandler.postDelayed(() -> isLiveActive = false, 1000);
}
// 修改点6:优化小窗点击处理
private void handleFloatClick() {
Log.d(TAG, "处理小窗点击");
mHandler.postDelayed(() -> {
if (isMetting) {
Intent intent = new Intent(activity, FHLiveActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);
overridePendingTransition(0, 0);
}
}, 200);
}
// 保留原有方法(未修改)
private void configOutViewGroup() {
if (outViewGroup == null) {
outViewGroup = new RelativeLayout(getApplicationContext());
outViewGroup.setLayoutParams(new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT
));
}
if (outWebView == null) {
outWebView = new WebView(outViewGroup.getContext());
WebSettings webSettings = outWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
outWebView.setWebViewClient(new WebViewClient());
outWebView.loadUrl(""); // 配置业务URL
}
outViewGroup.removeAllViews();
outViewGroup.addView(outWebView);
FHVideoManager.getInstance().configOutViewGroup(outViewGroup);
}
// 保留原有方法(未修改)
private void destroyOutViewGroup() {
if (outWebView != null) {
outWebView.stopLoading();
outWebView.removeAllViews();
outWebView.destroy();
outWebView = null;
}
if (outViewGroup != null) {
outViewGroup.removeAllViews();
}
}
private void finishCallMeeting(String msg) {
Log.d(TAG, "结束会话: " + msg);
isMetting = false;
isLiveActive = false;
destroyOutViewGroup();
}
@Override
protected void onResume() {
super.onResume();
Log.d(TAG, "onResume");
mHandler.removeCallbacksAndMessages(null);
}
@Override
protected void onRestart() {
super.onRestart();
Log.d(TAG, "onRestart isMetting=" + isMetting);
// 修改点7:优化返回处理
mHandler.postDelayed(() -> {
if (isMetting && !isLiveActive) {
Log.d(TAG, "恢复视频页面");
Intent intent = new Intent(activity, FHLiveActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);
overridePendingTransition(0, 0);
}
}, 300);
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d(TAG, "onDestroy");
// 修改点8:确保资源释放
mHandler.removeCallbacksAndMessages(null);
FHAPlayer.getInstance().stopPlayer();
destroyOutViewGroup();
}
}这个写的java中,这是一个视频功能调用sdk,启动视频各种功能,但是现在首次点击最小化,会有一个白屏/黑屏,再点返回才能到app(混合开发的vue页面),后续的最小化都没有问题,根据上面的代码,分析什么原因导致的,并给出解决的办法,修改什么地方才能解决
最新发布