webView与h5交互时,发现视频播放这块一直会有问题,会发现1.退出当前页面视频还在继续播放,2,视频不支持全屏播放。那我们来额问题。
视频支持全屏播放
1.webView设置支持视频大小。一般有video标签,object标签
String head = "<head><style>img{max-width: 100%; width:auto; height: auto;}video{width: 100%; height: 240;object-fit:cover;}object{width: 100%; height: 240;object-fit:cover;}</style></head>";
String html = "<html>" + head + "<body>" + htmlContent + "</body></html>
mWebView.loadDataWithBaseURL(null, html, "text/html", "UTF-8", null);
2.设置webView支持视频显示/隐藏全屏,实现WebChromeClient类,重写三个方法getVideoLoadingProgressView(), onShowCustomView(View view, CustomViewCallback callback),onHideCustomView()
mWebView.setWebChromeClient(new WebChromeClient() {
/*** 视频播放相关的方法 **/
@Override
public View getVideoLoadingProgressView() {
FrameLayout frameLayout = new FrameLayout(mContext);
frameLayout.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
return frameLayout;
}
@Override
public void onShowCustomView(View view, CustomViewCallback callback) {
showCustomView(view, callback);
}
@Override
public void onHideCustomView() {
hideCustomView();
}
});
/**
* 隐藏视频全屏
*/
private void hideCustomView() {
if (customView == null) {
return;
}
setStatusBarVisibility(true);
FrameLayout decor = (FrameLayout) getWindow().getDecorView();
decor.removeView(fullscreenContainer);
fullscreenContainer = null;
customView = null;
customViewCallback.onCustomViewHidden();
mWebView.setVisibility(View.VISIBLE);
// 设置竖屏
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
// 取消全屏
final WindowManager.LayoutParams attrs = getWindow().getAttributes();
attrs.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().setAttributes(attrs);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
}
/**
* 设置全屏
*
* @param visible
*/
private void setStatusBarVisibility(boolean visible) {
int flag = visible ? 0 : WindowManager.LayoutParams.FLAG_FULLSCREEN;
getWindow().setFlags(flag, WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
退出时暂停网页中播放的视频
@Override
protected void onPause() {
super.onPause();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
if (mWebView != null) {
mWebView.onPause(); // 暂停网页中正在播放的视频
}
}
}
@Override
public void onDestroy() {
super.onDestroy();
if (mWebView != null) {
mWebView.clearHistory();
mWebView.clearCache(true);
}
}