【问题标题】:Audio in webview continues to play in backgroundwebview中的音频继续在后台播放
【发布时间】:2016-08-12 23:32:47
【问题描述】:

我有一个带有音频播放器的网络视图。如果我启动音频并按返回以返回上一个活动,音频仍会在后台继续播放。这个问题只有在API低于11时才会出现。

我的代码:

@Override
public void finish() {
        if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
           webView.onPause();
        } else {
            webView.loadUrl("about:blank");
        }
}

我也试过了

webView.loadData("", "text/html", "utf-8");

webView.clearCache(true);
webView.clearHistory();
webView.destroy();

但它没有用。

有人知道怎么解决吗?

【问题讨论】:

    标签: android audio webview


    【解决方案1】:

    一个对我有用的简单技巧是

    webView.loadUrl("javascript:document.location=document.location");
    

    【讨论】:

    • 这需要更多的支持... onPause 方法都不起作用。这是在我的查看器中更改片段时禁用从我的 HTML5 Webview 播放的音频的唯一修复。谢谢!!!
    【解决方案2】:

    这解决了 API 的问题 > 11

    @Override
    public void onPause() {
        super.onPause();
        if(webView != null) {
            webView.onPause();
        }
    }
    @Override
    public void onResume() {
        super.onResume();
    
        if (webView != null) {
            webView.onResume();
        }
    }
    

    但对于较低版本(在您的情况下),您需要调用 onPauseonResume,如下所示

        @Override
        public void onPause() {
        super.onPause();
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){
              webview.onPause();
            } else {
        try {
            Class.forName("android.webkit.WebView")
                    .getMethod("onPause", (Class[]) null)
                                .invoke(webview, (Object[]) null);
    
        } catch(ClassNotFoundException cnfe) {
            ...
        } catch(NoSuchMethodException nsme) {
            ...
        } catch(InvocationTargetException ite) {
            ...
        } catch (IllegalAccessException iae) {
            ...
        }
        }
        }
    
        @Override
        public void onResume() {
        super.onPause();
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){
              webview.onResume();
            } else {
        try {
            Class.forName("android.webkit.WebView")
                    .getMethod("onResume", (Class[]) null)
                                .invoke(webview, (Object[]) null);
    
        } catch(ClassNotFoundException cnfe) {
            ...
        } catch(NoSuchMethodException nsme) {
            ...
        } catch(InvocationTargetException ite) {
            ...
        } catch (IllegalAccessException iae) {
            ...
        }
        }
        }
    

    【讨论】:

    • 它不起作用,音频仍在后台继续播放。
    猜你喜欢
    • 2015-05-27
    • 2015-10-14
    • 2012-02-05
    • 1970-01-01
    • 2013-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多