当应用程序转到后台时,无法在Android应用内WebView上暂停HTML5 / Flash声音

时间:2015-09-16 09:29:34

标签: android html5 flash android-webview chromium

重现问题的步骤:

  1. 使用应用内WebView启动应用程序。

  2. 致电webview.loadUrl(“http://n-g.nxtomo.hk/CYvsCP/app.html?nocache=true”);

  3. 点击网页一次,然后开始播放背景音乐。

  4. 按HOME按钮,应用程序将转到后台,但音乐会继续播放。

  5. 当活动转到后台时,预计WebView会暂停。

    我试过打电话:

    webview.onResume();
    webview.onPause();
    

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

    wv.resumeTimers();
    wv.pauseTimers();
    

    对于Android 4.4.2和5.0,两种方式都不起作用(意味着没有效果并且在后台继续播放声音),我只有两个设备。

    我发现一个建议是删除MediaPlayer的回调,强制停止声音播放。

    @Override
        protected void onPause() {
            super.onPause();
    
            ((AudioManager) getSystemService(
                    Context.AUDIO_SERVICE)).requestAudioFocus(
                    null,
                    AudioManager.STREAM_MUSIC,
                    AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
        }
    

    这是停止声音的工作。 但!当我恢复应用程序时,声音将不会自动播放。所以,我正在寻找一种正式的方法来解决这个问题。 :(

    参阅

    1. [问题532359:在后台应用程序时,无法在Android应用内WebView上暂停HTML5声音。 - 2015年9月16日] https://code.google.com/p/chromium/issues/detail?id=532359

    2. [问题10282:WebView.onPause和WebView.onResume的公共API - 2010年8月7日] https://code.google.com/p/android/issues/detail?id=10282

2 个答案:

答案 0 :(得分:0)

我有完全相同的问题,正在寻找官方修复。 我找到的唯一解决方法是

  

使用loadURL( “”);

但它远非一个好的解决方案。一旦您重新加载页面重新加载,如果您需要使webview会话保持活动或持久,这可能会导致很多问题。

答案 1 :(得分:0)

Google的回复: https://code.google.com/p/chromium/issues/detail?id=532359#c5

  嗯,如果你只是想改变Android应用程序,那么你可能已经不在了   祝你在那里能做什么。

     

如果您可以更改页面,则可以查看页面可见性API   暂停/恢复播放(Tim可能知道它是否已启用WebView或   不是)。

     

但最终,由于它是WebView,您的应用可以与之通信   页面并使其在应用程序的活动中播放/暂停播放   的onPause /的onResume。