Android - when exiting a WebView, the audio still keeps playing

落花浮王杯 提交于 2020-01-09 09:49:50

问题


I have this code which works and the only problem with it is that if I leave the WebView and even close the app, and even press power on the phone, the audio from the podcasts keeps playing.

Would anyone know how to stop that?

Here is the code:

public class PodcastsActivity extends BaseActivity //implements ActionBar.OnNavigationListener 
{    
    WebView webview = null;

    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        //setTheme(R.style.Theme_Sherlock_Light);
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.podcasts);


        webview = new WebView(this);
        webview.getSettings().setAppCacheEnabled(false);
        webview.getSettings().setJavaScriptEnabled(true);
        webview.setInitialScale(1);
        webview.getSettings().setPluginState(PluginState.ON);

        webview.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
        });




        //webSettings.setBuiltInZoomControls(true);


        WebSettings webSettings = webview.getSettings();
        webSettings.setJavaScriptEnabled(true);
        webSettings.setBuiltInZoomControls(true);
        //webSettings.getMediaPlaybackRequiresUserGesture();
        webSettings.setAllowContentAccess(true);
        webSettings.setEnableSmoothTransition(true);
        webSettings.setLoadsImagesAutomatically(true);
        webSettings.setLoadWithOverviewMode(true);
        webSettings.setSupportZoom(true);
        webSettings.setUseWideViewPort(true);

        setContentView(webview);
        webview.loadUrl("http://www.stitcher.com/podcast/entrepreneuronfirecom/entrepreneur-on-fire-tim-ferriss-other-incredible-entrepreneurs");           

    }

//  public void onBackPressed ( )
//  {
//      Class.forName("com.***.HTML5WebView").getMethod("onPause", (Class[]) null).
//      invoke(html5WebView, (Object[]) null);
//  }


    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) 
    {
        if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) 
        {
            webview.goBack();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }       

    @Override
    public void onStop()
    {
       super.onStop();
       // your code

       webview.clearView();
    }

回答1:


You should call through to the WebView's onPause() and onResume() from your Activity's onPause() and onResume(), respectively.

Pauses any extra processing associated with this WebView and its associated DOM, plugins, JavaScript etc. For example, if this WebView is taken offscreen, this could be called to reduce unnecessary CPU or network traffic. When this WebView is again "active", call onResume().


There's also pauseTimers(), which affects all of the WebViews within your application:

Pauses all layout, parsing, and JavaScript timers for all WebViews. This is a global requests, not restricted to just this WebView. This can be useful if the application has been paused.




回答2:


Accepted answer didnt work for me - just using onPause in a fragment was not enough to stop music on Android 9. I had to also do:

override fun onDestroyView() {
    webview?.destroy()

    super.onDestroyView()
}


来源:https://stackoverflow.com/questions/17689055/android-when-exiting-a-webview-the-audio-still-keeps-playing

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!