java - 当用户锁定屏幕时如何保持我的 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
解决方案
推荐阅读
- ios - 在 coredata 中过滤 Vs NSPredicate
- css - 在伪元素未出现在路径元素上之前
- swiftui - 在 SwiftUI 中使用 Timer 触发 NavigationView 更改的正确方法
- asp.net - 我想将我的 rdlc 报告转换为土耳其语
- ajax - 如何使成功的ajax成功
- python - 计算范围内每一行之间的平均值
- java - Android ssh在Buttonclick上没有返回任何东西
- reactjs - 如何在输入和获取坐标时获取自动完成地址
- gnuplot - Gnuplot没有变量“暂停”
- java - 砖和球之间的碰撞检测(突破,破砖)?