webview中的音频继续在后台播放

时间:2015-07-23 20:23:49

标签: android audio webview

我有一个带有音频播放器的webview。如果我启动音频并按回以返回上一个活动,则音频仍然在后台继续播放。仅当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();

但它没有用。

有谁知道如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

这解决了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) {
        ...
    }
    }
    }

答案 1 :(得分:0)

对我有用的简单黑客是

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