MediaRecorder显示用于录音的相机预览

时间:2017-11-20 07:45:09

标签: android audio camera mediarecorder

我正准备一个小型的Android应用程序,捕捉照片&来自用户的录音。像用户这样的东西会用他的相机拍照,然后在查看该照片时添加音频评论。

要捕获音频我正在使用MediaRecorder [因为Android默认录音机将不允许应用在录音完成时显示自定义图像]。当应用程序没有CAMERA权限时,MediaRecorder正如我所期望的那样工作。用户可以查看自定义屏幕并录制音频。但是当对应用程序给予CAMERA许可时,MediaRecorder正在打开本机相机预览,即使我没有为MediaRecorder设置视频源。当应用程序具有CAMERA权限时,就好像您无法在没有相机预览的情况下录制音频。

import static android.Manifest.permission.RECORD_AUDIO;
import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE;
import static android.Manifest.permission.CAMERA;

mediaRecorder=new MediaRecorder();
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mediaRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
mediaRecorder.setOutputFile(AudioSavePathInDevice);

我继续尝试使用自定义Surface

创建1像素* 1像素相机预览
mCamera = getCameraInstance();
mPreview = new CameraPreview(getApplicationContext(), mCamera);
FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);
preview.addView(mPreview);
mediaRecorder.setCamera(mCamera);
mediaRecorder.setPreviewDisplay(mPreview.getHolder().getSurface()); 

但我的MI手机无视并继续完整的相机预览。那么有一种简单的方法可以使用MediaRecorder录制音频而无需在相机权限存在时启动本机相机吗?

1 个答案:

答案 0 :(得分:1)

根据我的经验,1x1像素预览不可靠,许多设备无法正常使用。在某些设备上,您可以通过巧妙的布局(例如巨大的左边距)将SurfaceView推出屏幕,而不是在其他设备上。可以在视图层次结构的其他元素下隐藏SurfaceView,但这并不总能顺利运行,因为框架有时会创建一个Surface太迟(我相信它是某些设备上的错误,而不是意图)。

使用TextureView更安全,如MediaRecorder official sample中所示。您可以将TextureView的可见性设置为隐藏,或将其隐藏在其他视图后面,并且可以使其非常小。您可以在此处找到更多详细信息:https://stackoverflow.com/a/21447945/192373