显示录音相机预览的 MediaRecorder

MediaRecorder showing Camera Preview for Audio Recording

我正在准备一个小型 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);

我继续尝试使用自定义表面创建 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 phone 忽略并继续进行完整的相机预览。那么有没有一种简单的方法可以在存在相机权限的情况下使用 MediaRecorder 录制音频而无需启动本机相机?

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

使用TextureView更安全,如MediaRecorder official sample. You can set visibility of the TextureView to hidden, or hide it behind some other view, and you can make it very small. Here you can find more details: .