带有embedded式YouTubevideo的Android WebView,全屏button冻结video

我有一个android webview加载一个WordPress的博客。 一些博客文章包含youtubevideo,我希望用户能够如果他们希望能够全屏。 问题是HTML5的全屏button什么都不做,点击,但冻结了视图。 有任何想法吗?

Solutions Collecting From Web of "带有embedded式YouTubevideo的Android WebView,全屏button冻结video"

这是我在最后一天花了我的头发。 基于来自networking的各种代码,我设法使其工作。

首先,您需要创build一个自定义的WebChromeClient类,它实现了onShowCustomViewonHideCustomView方法。

 private class MyWebChromeClient extends WebChromeClient { FrameLayout.LayoutParams LayoutParameters = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT); @Override public void onShowCustomView(View view, CustomViewCallback callback) { // if a view already exists then immediately terminate the new one if (mCustomView != null) { callback.onCustomViewHidden(); return; } mContentView = (RelativeLayout) findViewById(R.id.activity_main); mContentView.setVisibility(View.GONE); mCustomViewContainer = new FrameLayout(MainActivity.this); mCustomViewContainer.setLayoutParams(LayoutParameters); mCustomViewContainer.setBackgroundResource(android.R.color.black); view.setLayoutParams(LayoutParameters); mCustomViewContainer.addView(view); mCustomView = view; mCustomViewCallback = callback; mCustomViewContainer.setVisibility(View.VISIBLE); setContentView(mCustomViewContainer); } @Override public void onHideCustomView() { if (mCustomView == null) { return; } else { // Hide the custom view. mCustomView.setVisibility(View.GONE); // Remove the custom view from its container. mCustomViewContainer.removeView(mCustomView); mCustomView = null; mCustomViewContainer.setVisibility(View.GONE); mCustomViewCallback.onCustomViewHidden(); // Show the content view. mContentView.setVisibility(View.VISIBLE); setContentView(mContentView); } } } 

基本上,这里发生的事情是当全屏button被按下时,我们正在创build一个新视图来保存video并隐藏主视图。 然后当全屏closures时,我们做相反的事情 – 摆脱新视图,显示原始视图。

您还需要将所有这些属性添加到您的活动类中:

 private MyWebChromeClient mWebChromeClient = null; private View mCustomView; private RelativeLayout mContentView; private FrameLayout mCustomViewContainer; private WebChromeClient.CustomViewCallback mCustomViewCallback; 

而当您按下后退button时,您可能想要closures全屏video:

 @Override public void onBackPressed() { if (mCustomViewContainer != null) mWebChromeClient.onHideCustomView(); else if (myWebView.canGoBack()) myWebView.goBack(); else super.onBackPressed(); } 

那么当你创build你的webview时,只需要使用你的新类:

 myWebView = (WebView) findViewById(R.id.webView1); mWebChromeClient = new WMWebChromeClient(); myWebView.setWebChromeClient(mWebChromeClient); 

这适用于Android 4.x上的我。 不确定早期版本,因为我的应用程序没有针对他们。

我发现这些链接特别有用: WebView和HTML5 <video>和http://code.google.com/p/html5webview/source/browse/trunk/HTML5WebView/src/org/itri/html5webview/HTML5WebView.java

您可以启动一个外部的YouTube应用程序,当您将cathvideo信息URL,直接在应用程序中显示YouTubevideo并不重要。

要捕捉video信息URL您需要使用onLoadResource方法:

 new WebViewClient() { @Override public void onLoadResource(WebView view, String url) { if (url.startsWith("http://www.youtube.com/get_video_info?")) { try { String path = url.replace("http://www.youtube.com/get_video_info?", ""); String[] parqamValuePairs = path.split("&"); String videoId = null; for (String pair : parqamValuePairs) { if (pair.startsWith("video_id")) { videoId = pair.split("=")[1]; break; } } if(videoId != null){ startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.youtube.com")) .setData(Uri.parse("http://www.youtube.com/watch?v=" + videoId))); needRefresh = true; return; } } catch (Exception ex) { } } else { super.onLoadResource(view, url); } } }