2

我想在后台使用 MediaPlayer 播放视频,因此当用户离开我的应用程序时,他仍然会听到音频,而当他返回应用程序时,他会看到视频。我设法用播放 MediaPlayer 的服务完成了第一部分,但第二部分有问题。当我离开应用程序并返回时,SurfaceView 中不显示视频。

当用户返回时,我创建了新的 Surface,所以我尝试了这个:

public void surfaceCreated(SurfaceHolder holder) {
    if(mService!=null && mService.player.isPlaying()){          
        try {
            mService.player.setDisplay(holder);
            mService.player.prepare();
            mService.player.start();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }


    }       
}

WhilemService是我的服务,他持有 MediaPlayer player

在我的研究中,我看到了这篇文章: 返回 Android 中的视频播放活动时出现黑屏

但这是一年前发布的,所以也许任何人都有任何不同的新答案。

编辑:我忘了说视频正在流式传输,所以重置不是一个好的选择(我试过:))。

是否可以将 SurfaceView 保存在服务中以及当用户返回查看视图并将其动态添加到当前布局时?

4

1 回答 1

0

首次启动 Activity 时:onResume()->onSurfaceCreated()->onSurfaceChanged()。
离开 Activity 时:onPause()->onSurfaceDestroyed()

所以我离开你的应用程序,表面将被自动销毁,你也不能在服务中保存表面视图。
请记住,如果您想再次显示视频,必须再次创建表面视图和持有者回调onStart,以防您按下主屏幕或锁屏

surfaceView = (SurfaceView) findViewById(R.id.surfaceView);

holder = surfaceView.getHolder();
holder.setFixedSize(800, 480);
holder.addCallback(this);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
于 2014-05-20T08:31:47.870 回答