Android - Jelly Bean - YouTube只播放一次视频

时间:2013-12-14 13:39:46

标签: android webview youtube

我正在使用WebView在我的Android应用中播放YouTube视频。 它工作正常,但我似乎遇到了Jelly Bean的问题(也许是后来的版本,我还不知道)。

我第一次播放视频时效果很好,但是当我尝试再次播放或者再播放另一个视频时,关闭WebView并重新打开后,我看到视频加载但是然后进入暂停模式(如图中所示)。

关闭WebView时,我正在使用此代码,我认为这是导致问题的原因:

Class.forName("android.webkit.WebView").getMethod("onPause", (Class[]) null).invoke(webview, (Object[]) null);

有人遇到这个问题吗?

左图 - 视频正常播放。

中间图像 - 尝试再次加载。

正确的图像 - 视频已暂停且从未启动过。

enter image description here

这是我正在使用的代码:

private void loadUrl() 
{
        progress.setVisibility(View.VISIBLE);
        webview.setWebChromeClient(new WebChromeClient());

        if (Build.VERSION.SDK_INT < 8) {
            webview.getSettings().setPluginsEnabled(true);
        } else {
            webview.getSettings().setPluginState(PluginState.ON);
        }

        WebSettings webSettings = webview.getSettings();
        webSettings.setJavaScriptEnabled(true);


        webview.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView wView, String url)
            {
                progress.setVisibility(View.VISIBLE);
                webview.loadUrl(url);
                isLoading = true;
                return true;
            }

            @Override
            public void onPageStarted (WebView view, String url, android.graphics.Bitmap favicon)
            {
                progress.setVisibility(View.VISIBLE);
            }

            @Override
            public void onReceivedError (WebView view, int errorCode, String description, String failingUrl)
            {
                progress.setVisibility(View.GONE);
                isLoading = false;
            }

            @Override
            public void onPageFinished (WebView view, String url)
            {
                progress.setVisibility(View.GONE);
                isLoading = false;
            }
        });

        webview.loadUrl(url);
 }

1 个答案:

答案 0 :(得分:0)

我通过清除/销毁webview解决了这个问题:

         if (webview != null)
         {
             if (isLoading)
             { 
                    webview.stopLoading();
             }

             webview.clearCache(true);
             webview.clearView();
             webview.freeMemory();
             webview.destroy();  
         }