返回到不工作的活动时MediaPlayer setDisplay

时间:2012-08-24 15:43:49

标签: android service media-player

我想在后台播放MediaPlayer视频,所以当用户离开我的应用时,他仍会听到音频,当他回到应用程序时,他会看到视频。我设法用Service播放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();
        }


    }       
}

虽然mService是我的服务,但他持有MediaPlayer player

在我的研究中,我看到了这篇文章: Black screen when returning to video playback activity in Android

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

编辑: 我忘了说视频是流媒体,所以重置不是一个好选择(我试过:))。

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

1 个答案:

答案 0 :(得分:0)

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

所以,你离开你的应用程序,表面将自动销毁,你也无法在使用中保存surfaceview 请记住,如果您想再次显示视频,必须在onStart中再次创建surfaceview和holder回调,以防您的家庭或锁屏被按下

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

holder = surfaceView.getHolder();
holder.setFixedSize(800, 480);
holder.addCallback(this);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);