有没有办法让Android摄像头录制多个活动?

时间:2013-09-16 17:14:13

标签: android android-layout android-activity android-camera surfaceview

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

我知道我需要创建SurfaceView并使用MediaRecorder类来设置录制。我想在SurfaceView之间传递此Activities,而不必在每个新Activity中对其进行初始化。这样做的目的是不必中断摄像机录制。

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

2 个答案:

答案 0 :(得分:1)

您无法在活动之间传递SurfaceView,因为它不可分区。因此,如果活动,摄像机录制将被中断。您可以使用片段,保留用于在活动类和导航中记录的代码,不断更改片段。

答案 1 :(得分: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的{​​{1}}设置为SurfaceView的预览显示。我还将Camera的{​​{1}}设置为Surface的预览显示。

SurfaceHolder

最后,我在MediaRecorder的子类中保留了mCamera.setPreviewDisplay(mSurfaceView.getHolder()); // ... other code goes here ... mMediaRecorder.setCamera(mCamera); // ... other code goes here ... mMediaRecorder.setPreviewDisplay(mSurfaceView.getHolder().getSurface()); Camera的实例。这确保了MediaRecorder不会被垃圾收集,因为它被其他对象引用,这些对象在应用程序生命周期的持续时间内具有引用。这允许我通过多个Application在相机上进行录制,直到我在SurfaceView的实例上调用Activities函数。

stop()

编辑:不幸的是,这对华硕Nexus 7无效。它可以在三星Galaxy S4上运行。