WebView实现视频全屏播放
时间: 2023-11-26 18:06:54 浏览: 34
WebView可以通过以下步骤实现视频全屏播放:
1. 在WebViewClient中重写shouldOverrideUrlLoading方法,拦截视频链接。
2. 在拦截到视频链接时,创建一个全屏的Activity,并将WebView添加到该Activity中。
3. 隐藏状态栏、导航栏等UI元素,让WebView占据整个屏幕。
4. 在WebView中播放视频。
5. 在Activity销毁时,将WebView从该Activity中移除,并恢复原来的UI状态。
下面是一个示例代码:
```
public class VideoWebViewClient extends WebViewClient {
private Activity mActivity;
private WebView mWebView;
private View mCustomView;
private WebChromeClient.CustomViewCallback mCustomViewCallback;
public VideoWebViewClient(Activity activity, WebView webView) {
mActivity = activity;
mWebView = webView;
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.endsWith(".mp4") || url.endsWith(".avi") || url.endsWith(".3gp") || url.endsWith(".wmv")) {
Intent intent = new Intent(mActivity, FullScreenVideoActivity.class);
intent.putExtra("url", url);
mActivity.startActivity(intent);
return true;
}
return false;
}
public void onHideCustomView() {
if (mCustomView == null) {
return;
}
mCustomView.setVisibility(View.GONE);
mWebView.setVisibility(View.VISIBLE);
mCustomViewCallback.onCustomViewHidden();
mCustomView = null;
mCustomViewCallback = null;
// Show the status bar.
View decorView = mActivity.getWindow().getDecorView();
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
public void onShowCustomView(View view, WebChromeClient.CustomViewCallback callback) {
if (mCustomView != null) {
onHideCustomView();
return;
}
mCustomView = view;
mWebView.setVisibility(View.GONE);
mCustomView.setVisibility(View.VISIBLE);
mCustomViewCallback = callback;
// Hide the status bar.
View decorView = mActivity.getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
mActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
}
public class FullScreenVideoActivity extends Activity {
private WebView mWebView;
private String mUrl;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_full_screen_video);
mWebView = findViewById(R.id.webview);
mUrl = getIntent().getStringExtra("url");
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.setWebViewClient(new VideoWebViewClient(this, mWebView));
mWebView.setWebChromeClient(new WebChromeClient() {
public void onShowCustomView(View view, CustomViewCallback callback) {
((VideoWebViewClient) mWebView.getWebViewClient()).onShowCustomView(view, callback);
}
public void onHideCustomView() {
((VideoWebViewClient) mWebView.getWebViewClient()).onHideCustomView();
}
});
mWebView.loadUrl(mUrl);
}
@Override
public void onBackPressed() {
if (mWebView.canGoBack()) {
mWebView.goBack();
} else {
super.onBackPressed();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
ViewGroup parent = (ViewGroup) mWebView.getParent();
if (parent != null) {
parent.removeView(mWebView);
}
mWebView.destroy();
}
}
```
在这个示例中,VideoWebViewClient拦截视频链接并启动FullScreenVideoActivity,该Activity中包含了一个WebView,用于播放视频。在播放视频时,将WebView占据整个屏幕并隐藏状态栏、导航栏等UI元素,让视频全屏播放。在Activity销毁时,将WebView从该Activity中移除,并恢复原来的UI状态。