2017-07-21 135 views
2

我知道这是一个古老的问题,它被问了很多次。但我尝试了很多解决方案,他们都不适合我。如何在全屏模式下播放视频并退出Android WebView的全屏模式?

我在华为6P和三星S7,Nexus 5, WebView中的视频(https://www.youtube-nocookie.com/embed/M68lNfqmTNk?rel=0&rel=0&showinfo=0)没有像预期的那样工作(它在去年工作过)。 当我点击全屏按钮时,会继续调用“onShowCustomView”和“onHideCustomView”。所以我可以看到视频闪烁(非全屏 - >全屏 - >非全屏)。 有时候,如果我很幸运,视频会进入全屏模式,但如果按全屏按钮退出全屏模式,该按钮根本不起作用。

我在GitHub写了一个demo,希望有人能帮助我。谢谢。

下面是代码

初始化网页视图:

mWebView = (WebView)findViewById(R.id.webview); 

    mWebChromeClient = new MyWebChromeClient(); 
    mWebView.setWebChromeClient(mWebChromeClient); 
    mWebView.setWebViewClient(new WebViewClient(){ 
     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      mWebView.loadUrl(url); 
      return true; 
     } 
    }); 
    WebSettings webSettings = mWebView.getSettings(); 
    webSettings.setJavaScriptEnabled(true); 
    webSettings.setUseWideViewPort(true); 
    webSettings.setAllowFileAccess(true); 
    webSettings.setSupportZoom(true); 
    webSettings.setLoadWithOverviewMode(true); 
    webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE); 

MyWebChromeClient:

public 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) { 
     Log.d("youtube", "onShowCustomView"); 
     // if a view already exists then immediately terminate the new one 
     if (mCustomView != null) { 
      callback.onCustomViewHidden(); 
      return; 
     } 
     mContentView = (ConstraintLayout) 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() { 
     Log.d("youtube", "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); 
     } 
    } 

} 

我没设置安卓的硬件加速在AndroidManifest.xml

android:hardwareAccelerated="true" 
+0

https://stackoverflow.com/questions/38842869/how-to-fullscreen-youtube-video-in-webview请参考这个希望这个帮助! – Kushan2

+0

谢谢。我试过它不适合我。 – User9527

+0

https://stackoverflow.com/questions/15796661/android-webview-app-wont-let-video-player-go-full-screen/16199649#16199649你见过这个吗? – Kushan2

回答

1

要加载的YouTube视频,您必须使用IFRAME相反, 例如:

<iframe width="300" height=".." src="http://www.youtube.com/embed/M68lNfqmTNk" frameborder="0" allowfullscreen></iframe> 

和加载HTML文本的网页视图,像这样:<html><body> <iframe width="330" height="315" src="http://www.youtube.com/embed/M68lNfqmTNk" frameborder="0" allowfullscreen></iframe>....

+0

好点!我在我的资产文件夹中添加了一个本地html文件。现在看来,“全屏”按钮的作品。但有时全屏后整个屏幕都是黑色的。我更新了github中的演示代码 – User9527

+0

我检查了你的代码,首先认为你必须删除播放视频按钮,这是没用的,因为在将url加载到webview后用户必须再次点击才能播放视频,所以我认为它更好在onCreate中加载它,并尝试youtube api播放YouTube视频,然后使用webview更好 –

0

I T hink有很多的答案已经定义好这个问题 但我想你只是需要检查这个答案一旦markparnelllink

在链接标记定义解决方案中的WebView非常详细

+0

你可以看到,我的Demo代码来自markparnelllink。不适用于我的YouTube视频。谢谢 – User9527

0

添加以下代码在你的webview中。 webView.getSettings().setUserAgentString("Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");

相关问题