2

我想制作一个应用程序,在应用程序的整个生命周期中记录前置摄像头 - 从用户启动它到终止它。

我知道我需要创建一个SurfaceView并使用MediaRecorder该类来设置录制。我想SurfaceView在之间传递它,Activities而不必在每个新的Activity. 这样做的目的是不必中断摄像机记录。

这可能吗?我知道我可以通过教程中描述的相机应用程序进行录制,但我想完全控制,MediaRecorder因此无法使用此选项。

4

2 回答 2

1

You can not pass SurfaceView between activities as its not parcelable. So camera recording will get interrupted in case of activities. You can use fragments though, keep code for recording in activity class and on navigation keep changing fragments.

于 2013-09-16T17:35:41.343 回答
0

SurfaceView我通过在第一个应用程序中创建一个来解决这个问题,Activity如下所示:

mSurfaceView = new SurfaceView(MainActivity.this);
ViewGroup vg = (ViewGroup) getWindow().getDecorView().findViewById(android.R.id.content);
mSurfaceView.setLayoutParams(new LinearLayout.LayoutParams(1, 1));
mSurfaceView.setPadding(-1, -1, 0, 0);
vg.addView(mSurfaceView);

我将视图添加到ViewGroup活动的主要部分,并确保它不会显示在屏幕上。

然后我将SurfaceHolder这个设置SurfaceView为预览显示Camera。我还将 的 设置SurfaceSurfaceHolder的预览显示MediaRecorder

mCamera.setPreviewDisplay(mSurfaceView.getHolder());
// ... other code goes here ...
mMediaRecorder.setCamera(mCamera);
// ... other code goes here ...
mMediaRecorder.setPreviewDisplay(mSurfaceView.getHolder().getSurface());

Camera最后,我将and的实例MediaRecorder保留在Application. 这确保了SurfaceView不会被垃圾回收,因为它被在应用程序生命周期期间具有引用的其他对象引用。这使我可以通过多次在相机上录制,Activities直到我stop()MediaRecorder.

((CameraTest) getApplication()).setCamera(mCamera);
((CameraTest) getApplication()).setMediaRecorder(mMediaRecorder);

编辑:不幸的是,这不适用于华硕 Nexus 7。它确实适用于三星 Galaxy S4。

于 2013-09-24T20:21:52.187 回答