Android 11录制视频保存到相册
近年来,随着智能手机的不断普及,人们对于录制和分享视频的需求也越来越高。作为一个开发者,我们可以利用Android平台提供的功能来实现视频录制和保存到相册的功能。本文将介绍如何在Android 11上实现将录制的视频保存到相册的方法,并提供相关的代码示例。
目录
1. Android 11相册访问权限
在Android 11中,访问相册的方式与之前的版本有所不同。我们需要在AndroidManifest.xml文件中添加以下权限声明:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
此外,在Android 11中,我们还需要在运行时动态请求相册访问权限:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
if (!Environment.isExternalStorageManager()) {
Uri uri = Uri.parse("package:" + getPackageName());
Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION, uri);
startActivityForResult(intent, PERMISSION_REQUEST_CODE);
}
}
2. 录制视频
要录制视频,我们可以使用Android的MediaRecorder
类。以下是一个简单的示例代码,演示了如何录制视频:
private MediaRecorder mediaRecorder;
private SurfaceView surfaceView;
private SurfaceHolder surfaceHolder;
private void startRecording() {
mediaRecorder = new MediaRecorder();
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
File outputFile = new File(Environment.getExternalStorageDirectory(), "video.mp4");
mediaRecorder.setOutputFile(outputFile.getAbsolutePath());
surfaceHolder = surfaceView.getHolder();
surfaceHolder.setFixedSize(640, 480);
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
mediaRecorder.setPreviewDisplay(surfaceHolder.getSurface());
try {
mediaRecorder.prepare();
mediaRecorder.start();
} catch (IOException e) {
e.printStackTrace();
}
}
private void stopRecording() {
mediaRecorder.stop();
mediaRecorder.release();
mediaRecorder = null;
}
在上面的代码中,我们首先创建一个MediaRecorder
对象,然后设置音频和视频源、输出格式、编码器等。接下来,我们指定输出文件的路径,并设置预览显示的SurfaceHolder
。最后,我们调用prepare()
方法准备录制,并调用start()
方法开始录制。停止录制时,我们调用stop()
方法停止录制,并释放MediaRecorder
对象。
3. 保存视频到相册
在Android 11中,我们可以使用ContentValues
和MediaStore
类来保存视频到相册。以下是一个示例代码,演示了如何保存视频到相册:
private void saveVideoToGallery(File videoFile) {
ContentValues values = new ContentValues();
values.put(MediaStore.Video.Media.MIME_TYPE, "video/mp4");
values.put(MediaStore.Video.Media.DATE_ADDED, System.currentTimeMillis() / 1000);
values.put(MediaStore.Video.Media.DATA, videoFile.getAbsolutePath());
ContentResolver resolver = getContentResolver();
resolver.insert(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, values);
}
在上面的代码中,我们首先创建一个ContentValues
对象,并设置视频的MIME类型、创建时间和路径。然后,我们获取ContentResolver
对象,并通过insert()
方法将视频信息插入到相册中。
4. 完整代码示例
下面是一个完整的示例代码,演示了如何录制视频并保存到相册:
public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback {
private MediaRecorder mediaRecorder;
private SurfaceView surfaceView;
private SurfaceHolder surfaceHolder;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
surfaceView = findViewById(R.id.surfaceView);
surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback