【发布时间】:2020-01-30 21:15:00
【问题描述】:
我有一个应用程序,其中活动加载了一个正在播放视频的 web 视图。
我的最终目标是从 web 视图在后台播放媒体,这与 Chrome 现在所做的非常相似。
这是设备解锁时运行此逻辑的 chrome 截图:
我已经使用自定义 ChromeClient 设置了我的 webview,它覆盖了我需要的 MediaPlayer 方法。
public class MyCustomChromeClient extends WebChromeClient implements
MediaPlayer.OnCompletionListener, MediaPlayer.OnPreparedListener, MediaPlayer.OnErrorListener{
private MediaPlayer mp;
@Override
public void onCompletion(MediaPlayer mp) {
if (this.mp != null) {
this.mp.release();
} else {
mp.release();
}
}
@Override
public void onPrepared(MediaPlayer mp) {
this.mp = mp;
//Utilizing this MediaPlayer Here
}
@Override
public boolean onError(MediaPlayer mediaPlayer, int i, int i1) {
//Handle Error stuff here
return false;
}
}
我已经关注了有关该主题的多个教程,虽然我已经掌握了大部分逻辑,但我无法弄清楚如何真正控制媒体播放器以便从 Chrome 和让我的代码接管播放、暂停和停止功能。
以下是我一直在使用的一些参考资料:
- https://shashikawlp.wordpress.com/2013/06/25/play-html5-video-on-android-webview/
- video in webview should display full screen on onShowCustomView() method in android
- https://code.tutsplus.com/tutorials/background-audio-in-android-with-mediasessioncompat--cms-27030
- https://medium.com/androiddevelopers/understanding-mediasession-part-3-4-b4919583a82
- https://developer.android.com/guide/topics/media-apps/media-apps-overview
- https://www.nigeapptuts.com/android-media-viewer-mediaplayer-mediasessioncompat/
- https://medium.com/androiddevelopers/building-a-simple-audio-app-in-android-part-1-3-c14d1a66e0f1
几乎所有这些都解决了如何做我想做的大部分事情,但是拦截 MediaPlayer 并阻止它播放或暂停(除非通过我的转发命令)的核心问题不是其中之一。
如何为我自己的 webview 重新创建 Chrome 的背景媒体播放器选项,或者,除非有这种可能性,我是否可以通过某个界面与 Chrome 的内置播放器进行交互?
更新: 因此,在常规 chrome 浏览器上查看同一页面似乎实际上确实符合我的要求;它播放视频/音频并允许它在后台继续播放。所以下一个合乎逻辑的后续问题是,我到底在我的 Webview 中做了什么导致它在原生 chrome 浏览器上工作,而不是在我的应用程序上工作?有什么我可以覆盖的东西可以做到这一点吗?
【问题讨论】:
标签: android android-webview android-mediaplayer