【问题标题】:Using an Android Webview, how do I pass control of the MediaPlayer to the Activity使用 Android Webview,如何将 MediaPlayer 的控制权传递给 Activity
【发布时间】: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 和让我的代码接管播放、暂停和停止功能。

以下是我一直在使用的一些参考资料:

  1. https://shashikawlp.wordpress.com/2013/06/25/play-html5-video-on-android-webview/
  2. video in webview should display full screen on onShowCustomView() method in android
  3. https://code.tutsplus.com/tutorials/background-audio-in-android-with-mediasessioncompat--cms-27030
  4. https://medium.com/androiddevelopers/understanding-mediasession-part-3-4-b4919583a82
  5. https://developer.android.com/guide/topics/media-apps/media-apps-overview
  6. https://www.nigeapptuts.com/android-media-viewer-mediaplayer-mediasessioncompat/
  7. 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


    【解决方案1】:

    这个问题的答案很可能是该页面将使用“MediaSession”API,这在 Chrome 中受支持,但 not in WebView

    就您能做些什么而言,您可以编写一个“Javascript 桥”组件将页面事件发送回 WebView,并在此过程中复制 MediaSession 交互。如果您拥有相关页面,这会更容易,但您仍然可以在任何页面中定位和查询音频/视频元素。无论哪种方式,其细节都过于复杂,无法在此处尝试描述。

    【讨论】:

    • 你有这方面的例子吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多