http://droidyue.com/blog/2020/02/09/play-audio-or-video-background-in-webview-app-android/java
问题
- 咱们使用WebView播放音乐或视频(好比油管视频)
- 前台播放一直很正常,可是比较费电
- 进入后台后就会暂停播放
- 因此需求就是咱们想要App在后台时一样播放音视频
解决方法
- 重写onWindowVisibilityChanged方法,让网页任然感受像是在前台执行。
关键代码
1
2
3
4
5
6 |
override fun onWindowVisibilityChanged(visibility: Int) { super.onWindowVisibilityChanged(View.VISIBLE) Log.i("BackgroundMediaWebView", "onWindowVisibilityChanged " + "visibility=${toReadableVisibility(visibility)}") } |
- 当App 进入后台(按Home键),visibility会变成Gone
- 咱们强制调用
super.onWindowVisibilityChanged(View.VISIBLE)
会保持WebView继续播放音视频
完整代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 |
package com.example.webviewvisibilitychangedsample import android.content.Context import android.util.AttributeSet import android.util.Log import android.view.View import android.webkit.WebView class BackgroundMediaWebView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0 ) : WebView(context, attrs, defStyleAttr) { override fun onWindowVisibilityChanged(visibility: Int) { super.onWindowVisibilityChanged(View.VISIBLE) Log.i("BackgroundMediaWebView", "onWindowVisibilityChanged " + "visibility=${toReadableVisibility(visibility)}") } private fun toReadableVisibility(visibility: Int): String { return when(visibility) { View.VISIBLE -> "Visible" View.INVISIBLE -> "Invisible" View.GONE -> "Gone" else -> "Unknown" } } } |
完整示例项目