android - 让正在运行的 android.media.MediaPlayer 在应用程序中跨 Activity 持续存在

标签 android media-player surfaceview surfaceholder

我正在尝试显示一个视频流,该视频流从我的应用程序的一个 Activity 开始,然后跟随用户进行应用程序中的其他 Activity ,而无需重新准备。稍微暂停一下 Activity 更改是可以的,但它不应该重新启动。在一项 Activity 中一切正常,但在切换 Activity 时,MediaPlayer 似乎不想连接到新的 SurfaceHolder。不过,音频效果非常好,几乎没有任何障碍。

我一直在尝试通过使用应用程序上下文初始化的 SurfaceView 的子类来执行此操作。 (当我使用 Button 等简单 View 时,跨 Activity 重新定位应用程序上下文 View 似乎工作正常,所以我认为这不是问题所在。)在构造函数中,我创建了 MediaPlayer 对象,设置监听器和数据源(通过 HTTP 的 MP4 流——是的,我验证了我可以正常使用 MediaPlayer 来播放它),然后调用 prepareAsync。在我的 SurfaceHolder.CallbacksurfaceCreated 方法中,我调用了 setDisplay 并且(如果播放器已完成准备)开始 .在 surfaceDestroyed 方法中,我调用了 pause。如果表面已经创建,我会在准备回调中调用开始。

此时我不知所措。有什么想法吗?

最佳答案

更简单的方法是将位置存储在 onpause() 方法中:

public void onPause(){

     super.onPause();
     int pos = player.getCurrentPosition();
}

然后在新的 Activity 调用中:

player.seekTo(pos);

player.start();

但这不是很有效。在离开 Activity 时存储视频状态并在返回 Activity 时恢复视频状态会很好,但我在网上找不到这样的东西。

关于android - 让正在运行的 android.media.MediaPlayer 在应用程序中跨 Activity 持续存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6726331/

相关文章:

PHP - 来自 mysql 的 json_decode

android - 是否所有版本的 Android 都支持 MediaPlayer 流?

iphone - MPMoviePlayerViewController - 如何拦截或更改完成按钮的功能

android - 如何以编程方式为 AdMob 指定 adUnitId?

android - 如何在android studio项目中导入最新的Paypal sdk?

android - 保护安卓源代码

Android 停止计数器并销毁媒体播放器

android - 将 XML RelativeLayout 与 Surface View 相结合

android - 如何将 OpenGL 上下文中的纹理复制到另一个上下文

android - 如何在 Android 的 SurfaceView 中播放动画