您的位置:首页 > 移动开发

Android WebView 真正播放视频 全屏 横屏播放

2017-08-17 13:01 651 查看
WebView是个大坑,需求是希望点击一个视频链接跳转到网页上播放视频,然后点击全屏能自动横屏。。。查了很多东西,最后直接上代码吧,注释都在,直接看吧,使用也很简单,直接把URL传到这个Activity就行了,如果你的网站的视频是flash播放的话,会出现空白的情况,无法播放。。。所以必须是H5的。。

package com.gogosu.gogosuandroid.ui.strategy;

import android.app.Activity;
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.FrameLayout;

import com.gogosu.gogosuandroid.R;
import com.gogosu.gogosuandroid.model.Constant.IntentConstant;

public class WebVideoActivity extends Activity {

private WebView webView;
private String url;

/** 视频全屏参数 */
protected static final FrameLayout.LayoutParams COVER_SCREEN_PARAMS = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
private View customView;
private FrameLayout fullscreenContainer;
private WebChromeClient.CustomViewCallback customViewCallback;

@Override
protected void onCreate(Bundle bundle) {
super.onCreate(bundle);

url = getIntent().getStringExtra(IntentConstant.VIDEO_PLAY_LINK);//传进来视频链接
setContentView(R.layout.activity_full_screen);
webView = (WebView) findViewById(R.id.webview);
initWebView();
}

@Override
protected void onStop() {
super.onStop();
webView.reload();
}

@Override
protected void onResume() {
super.onResume();
webView.onResume();
webView.resumeTimers();
}

/** 展示网页界面 **/
public void initWebView() {
WebChromeClient wvcc = new WebChromeClient();
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setUseWideViewPort(true); // 关键点
webSettings.setAllowFileAccess(true); // 允许访问文件
webSettings.setSupportZoom(true); // 支持缩放
webSettings.setLoadWithOverviewMode(true);
webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE); // 不加载缓存内容

webView.setWebChromeClient(wvcc);
WebViewClient wvc = new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
webView.loadUrl(url);
return true;
}
};
webView.setWebViewClient(wvc);

webView.setWebChromeClient(new WebChromeClient() {

/*** 视频播放相关的方法 **/

@Override
public View getVideoLoadingProgressView() {
FrameLayout frameLayout = new FrameLayout(WebVideoActivity.this);
frameLayout.setLayoutParams(new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT));
return frameLayout;
}

@Override
public void onShowCustomView(View view, CustomViewCallback callback) {
showCustomView(view, callback);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//播放时横屏幕,如果需要改变横竖屏,只需该参数就行了
@Override

4000
public void onHideCustomView() {
hideCustomView();
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);//不播放时竖屏
}
});

// 加载Web地址
webView.loadUrl(url);
}

/** 视频播放全屏 **/
private void showCustomView(View view, WebChromeClient.CustomViewCallback callback) {
// if a view already exists then immediately terminate the new one
if (customView != null) {
callback.onCustomViewHidden();
return;
}

WebVideoActivity.this.getWindow().getDecorView();

FrameLayout decor = (FrameLayout) getWindow().getDecorView();
fullscreenContainer = new FullscreenHolder(this);
fullscreenContainer.addView(view, COVER_SCREEN_PARAMS);
decor.addView(fullscreenContainer, COVER_SCREEN_PARAMS);
customView = view;
setStatusBarVisibility(false);
customViewCallback = callback;
}

/** 隐藏视频全屏 */
private void hideCustomView() {
if (customView == null) {
return;
}

setStatusBarVisibility(true);
FrameLayout decor = (FrameLayout) getWindow().getDecorView();
decor.removeView(fullscreenContainer);
fullscreenContainer = null;
customView = null;
customViewCallback.onCustomViewHidden();
webView.setVisibility(View.VISIBLE);
}

/** 全屏容器界面 */
static class FullscreenHolder extends FrameLayout {

public FullscreenHolder(Context ctx) {
super(ctx);
setBackgroundColor(ctx.getResources().getColor(android.R.color.black));
}

@Override
public boolean onTouchEvent(MotionEvent evt) {
return true;
}
}

private void setStatusBarVisibility(boolean visible) {
int flag = visible ? 0 : WindowManager.LayoutParams.FLAG_FULLSCREEN;
getWindow().setFlags(flag, WindowManager.LayoutParams.FLAG_FULLSCREEN);
}

@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
/** 回退键 事件处理 优先级:视频播放全屏-网页回退-关闭页面 */
if (customView != null) {
hideCustomView();
} else if (webView.canGoBack()) {
webView.goBack();
} else {
finish();
}
return true;
default:
return super.onKeyUp(keyCode, event);
}
}

@Override
protected void onDestroy() {
super.onDestroy();
webView.stopLoading();
webView.setWebChromeClient(null);
webView.setWebViewClient(null);
webView = null;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: