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);//播放时横屏幕,如果需要改变横竖屏,只需该参数就行了
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; } }
相关文章推荐
- 菜鸟学android——webview播放网络视频,由竖屏转换为横屏全屏播放
- Android VideoView播放 项目中的 视频文件 自动横屏 全屏播放
- android webview: 视频全屏播放按返回页面被放大的问题
- Android如何让WebView中的HTML5页面实现视频全屏播放
- android 4.0以上WebView不能全屏播放视频的解决办法
- android WebView实现播放网络视频以及全屏显示
- Android webview实现h5视频全屏播放兼容Android7.0,自己添加webview库兼容全部版本
- Android WebView播放视频(包括全屏播放)
- Android中WebView的定位功能、视频全屏播放、下载功能、页面Url的处理、进度条处理
- [转]Android WebView播放视频(包括全屏播放),androidwebview
- Android webview加载html5网络视频全屏播放
- Android中加载WebView的H5全屏视频播放
- 使用webview播放视频,全屏状态下适应横屏播放
- android 4.0以上WebView不能全屏播放视频的解决办法
- 关于Android中使用WebView播放网络视频不能全屏的问题
- Android WebView 总结 —— 硬件加速使用HTML5播放视频及全屏方案
- Android解决WebView的定位功能、视频全屏播放、下载功能、页面Url的处理、进度条处理
- Android使用WebView全屏播放网页视频
- Android webview全屏播放HTML5中的视频
- Android用Webview播放优酷视频全屏问题