WebView - Youtube视频在旋转背景中播放并最小化

时间:2015-08-03 13:33:20

标签: android video webview youtube

我有一个WebView的问题,基本上我正在一个已经在地方嵌入视频的论坛中加载,如果你播放一个视频然后旋转设备,视频在后台继续播放,你可以到达它来阻止它。最小化应用程序时也会发生这种情况。有办法阻止这个吗?

这是我正在使用的WebView代码。

super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        this.view = (WebView) findViewById(R.id.webView);

        view.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                if (url != null && url.contains("grcade")) {
                    view.loadUrl(url);
                    view.getSettings().setJavaScriptEnabled(true);
                    return true;
                } else {
                    view.getContext().startActivity(
                            new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
                    return true;
                }
            }
        });

        view.setDownloadListener(new DownloadListener() {
            public void onDownloadStart(String url, String userAgent,
                                        String contentDisposition, String mimetype,
                                        long contentLength) {
                Intent i = new Intent(Intent.ACTION_VIEW);
                i.setData(Uri.parse(url));
                startActivity(i);
            }


        });

        if(savedInstanceState == null){

            String url = "http://grcade.co.uk";
            view.getSettings().setJavaScriptEnabled(true);
            view.loadUrl(url);
            view.getSettings().setSupportZoom(true);
            view.getSettings().setBuiltInZoomControls(true);
            view.getSettings().setDisplayZoomControls(false);
            view.getSettings().setLoadWithOverviewMode(true);

            view.setBackgroundColor(Color.WHITE);

        }

        final SwipeRefreshLayout pulltoRefresh = (SwipeRefreshLayout) findViewById(R.id.pullToRefresh);

        pulltoRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                view.reload();
                pulltoRefresh.setRefreshing(false);

            }
        });
    }

    @Override
    public void onSaveInstanceState (Bundle outState)
    {
        super.onSaveInstanceState(outState);
        view.saveState(outState);
    }

    @Override
    public void onRestoreInstanceState(Bundle savedInstanceState)
    {
        super.onRestoreInstanceState(savedInstanceState);
        view.restoreState(savedInstanceState);
        view.getSettings().setJavaScriptEnabled(true);
    }

    //Main WebView Panel End

任何帮助都会受到赞赏,因为我很困惑,我停止了它回来但是同样的方法不会起作用,因为添加它导致应用程序恢复到默认的webview URL而不是重新加载用户所在的页面。

感谢。

2 个答案:

答案 0 :(得分:8)

暂停/恢复视频

这样做的简单方法是在您希望视频停止播放时暂停WebView(即应用程序进入后台时)。这可以通过以下代码完成:

WebView view = (WebView) findViewById(R.id.webView);
view.onPause();    // This will pause videos and needs to be called for EVERY WebView you create
view.pauseTimers(); // This will pause JavaScript and layout for ALL WebViews and only needs to be called once to affect all WebViews

处理此逻辑的最佳位置是将暂停代码放在Activity的onPause()方法中,并在onResume中用户视图中返回活动时恢复WebView:

WebView mWebView; // Initialize this somewhere

@Override
protected void onPause(){
    super.onPause();
    if(mWebView != null){
        mWebView.onPause();
        mWebView.pauseTimers();
    }
}

@Override
protected void onResume(){
    super.onResume();
    if(mWebView != null){
        mWebView.onResume();
        mWebView.resumeTimers();
    }
}

您可能对WebView中的onPauseonResume以及pauseTimers / resumeTimers方法感兴趣。

处理方向变更

如果您不希望在旋转屏幕时重新启动Activity(这将阻止重新创建WebView),那么只需添加

android:configChanges="orientation|screenSize|keyboardHidden|keyboard"

在AndroidManifest文件中您的Activity的<activity>标记中。这通常不是一个好习惯,但是当您使用像WebView这样的复杂本机视图时,可以这样做(Android Web浏览器使用它来避免在旋转时重新创建)。使用此标记时会发生的情况是,只需调整布局大小以适应横向方向,您必须手动处理使用-port-land文件夹处理的任何特定于布局的更改资源。如果您只使用一个布局,那么这不是问题。

有关详细信息,请参阅this question/answer,并注意不会鼓励它,但它会起作用。

答案 1 :(得分:-1)

最小化应用时,您需要暂停webview。使用此代码暂停webview

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

关于“视频播放甚至你旋转你的手机”,这是功能不是一个错误!