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

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

  • android youtube下载url 403禁止
  • android youtube:分享一个youtubevideo到我的应用程序?
  • 如何使用YoutubePlayerSupportFragment在Android中使用带有现代UI的Youtube Player
  • YouTube Android播放器API在新的YouTube版本中抛出“BadParcelableException ClassNotFoundException:unmarshalling:asc”时
  • 获取YouTubevideo的下载url(Android / Java)
  • Youtube数据API:访问媒体流和播放(JAVA)
  • 有针对性的video之前的Youtube广告
  • 使用WebView和浏览器进行YouTubevideoapi有何不同?
  • 这是我在最后一天花了我的头发。 基于来自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); } } }