首页 > 解决方案 > 当用户锁定屏幕时如何保持我的 WebView 运行?

问题描述

我是新来的,我也是 android 应用程序开发的新手。我创建了一个非常简单的应用程序,可以从 WebView 中的 webradio url 流式传输音乐。当我的手机充电时它工作得很好:即使我锁定屏幕,音乐也会在后台播放数小时。问题是它不充电时:大约 10 分钟后,它停止播放,当我恢复应用程序时,webview 似乎被冻结了。

我做了一些研究,我知道我可以使用 MediaPlayer 服务,但我不太相信,因为我已经尝试过了,而且准备时间真的太长了。我想要快点的东西。在 WebView 中加载 url 将是我想要的,就像我在 Chrome 中加载相同的 url 时一样:即使我锁定屏幕,音乐也会持续播放几个小时,所以我不明白为什么它不在我的 WebView 中.

我已经实现了 WakeLock,但我不确定它是否是我需要的。我不需要打开屏幕,我只需要我的 WebView 在手机锁定时继续运行。这是我的 MainActivity :

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    boutonPause = (Button) findViewById(R.id.buttonPause);
    boutonPlay = (Button) findViewById(R.id.buttonPlay);
    navigateur =(MediaWebView) findViewById(R.id.navigateur);

    boutonPlay.setOnClickListener(this);
    boutonPause.setOnClickListener(this);

    PowerManager powerManager = (PowerManager) getApplicationContext().getSystemService(Context.POWER_SERVICE);
    wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
    wakeLock.setReferenceCounted(true);
    wakeLock.acquire();

}


@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)
@Override
public void onClick(View v) {


    if (v.getId() == R.id.buttonPlay) {
        navigateur.setWebChromeClient(new WebChromeClient());
        WebSettings webSettings = navigateur.getSettings();
        navigateur.getSettings().setJavaScriptEnabled(true);
        webSettings.setMediaPlaybackRequiresUserGesture(false);
        webSettings.setAllowContentAccess(true);
        webSettings.setDomStorageEnabled(true);
        navigateur.setWebViewClient(new WebViewClient(){

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url){
                return true;
            }

        });

        navigateur.loadUrl("https://listen.radioking.com/radio/96031/stream/134656");
    }
    else {
        WebSettings webSettings = navigateur.getSettings();
        navigateur.getSettings().setPluginState(WebSettings.PluginState.ON);
        webSettings.setJavaScriptEnabled(true);
        navigateur.loadUrl("about:blank");
    }
}

@Override
protected void onDestroy() {
    wakeLock.release();
    super.onDestroy();
}

@Override
protected void onPause() {
    super.onPause();
    System.out.println("pause");
}


@Override
protected void onResume() {
    super.onResume();
    System.out.println("resume");
}

@Override
protected void onStop() {
    super.onStop();
    System.out.println("stop");
}

我把它放在我的清单中:

 <uses-permission android:name="android.permission.WAKE_LOCK" />

谢谢 !

我的手机是小米红米 Note 5

标签: javaandroidwebviewwakelock

解决方案


推荐阅读