Android -退出WebView时,音频仍在播放

nwlqm0z1  于 2023-04-04  发布在  Android
关注(0)|答案(4)|浏览(197)

我有这个代码,它的工作和唯一的问题是,如果我离开WebView,甚至关闭应用程序,甚至按下手机上的电源,音频从播客继续播放。
有人知道怎么阻止吗?
下面是代码:

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();
    }
5ssjco0h

5ssjco0h1#

您应该分别从Activity的onPause()onResume()调用WebView的onPause()onResume()
暂停与此WebView及其关联DOM、插件、JavaScript等关联的任何额外处理。例如,如果此WebView被移出屏幕,则可以调用此函数以减少不必要的CPU或网络流量。当此WebView再次处于“活动”状态时,调用onResume()。
还有pauseTimers(),它会影响应用程序中的所有WebView:
暂停所有WebView的所有布局、解析和JavaScript计时器。这是一个全局请求,不仅限于此WebView。如果应用程序已暂停,这可能很有用。

blmhpbnm

blmhpbnm2#

接受的答案对我不起作用-只是在片段中使用onPause不足以停止Android 9上的音乐。我还必须这样做:

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

    super.onDestroyView()
}
nxagd54h

nxagd54h3#

Jetpack Compose的相同问题可以通过在onCreated中捕获WebView(https://google.github.io/accompanist/webview/)然后使用它来调用destroy()来解决。

val webViewState = rememberWebViewState(webViewUrl.value)
val webView = remember {
  mutableStateOf<android.webkit.WebView?>(null)
}

//..inside Composable..
WebView(
  state = webViewState,
  captureBackPresses = true,
  onCreated = { wv ->
    webView.value = wv
  }
)

//..on Back Press/Close Button..
webView.value?.destroy()
ttcibm8c

ttcibm8c4#

在我的情况下,WebView onPause()onResume()不适合我。

**解决方案:**onPause我加载下面的URL来停止音频:

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

相关问题