全栈工程师开发手册 (作者:栾鹏)

​​ 安卓教程全解​​

安卓调用系统录像功能,两种方式获取拍摄的视频。

1、启动系统录像intent,并直接返回视频数据

2、启动系统录像intent,录像后存储在指定的路径下,返回后app主动读取路径下的视频文件。


第一种方式:启动系统相机录像,返回视频数据

private static final int RECORD_VIDEO = 0;
private void takevideo() {
//生成Intent.
Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
//启动摄像头应用程序
startActivityForResult(intent, RECORD_VIDEO);
}

第二种方式:启动系统录像,视频存储到指定路径下

//使用一个intent请求录像,视频存储在指定位置
private Uri outputFileUri;
private static final int RECORD_VIDEO_SAVE = 1;
public void takevideo_save() {
//创建输出文件
File file = new File(Environment.getExternalStorageDirectory(),"test.mp4"); //存放在sd卡的根目录下
outputFileUri = Uri.fromFile(file);

//生成Intent.
Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);

//启动摄像头应用程序
startActivityForResult(intent, RECORD_VIDEO_SAVE);
}

接收系统录像的事件的返回结果(1返回视频数据,2返回视频地址)

除了可以根据返回的intent,也可以根据请求码来区别。

对于包含视频数据的,直接将数据给VideoView播放,对于不包含视频数据的这判定为存储在了指定位置。通过uri获取视频路径,将地址给VideoView播放。

//1、获取录制视频使用VideoView播放,2、获取视频存储地址
@Override
protected void onActivityResult(int requestCode,int resultCode, Intent data) {
//读取直接返回的视频数据
if (requestCode == RECORD_VIDEO) {
VideoView videoView = (VideoView)findViewById(R.id.activity1_video1);
Uri uri=data.getData();
videoView.setVideoURI(uri);
videoView.start();
Log.v("系统录像", "直接返回视频数据"+uri.getPath());
}
//读取指定路径的视频文件
else if (requestCode == RECORD_VIDEO_SAVE) {
VideoView videoView = (VideoView)findViewById(R.id.activity1_video1);
videoView.setKeepScreenOn(true);
String path = outputFileUri.getPath();
String path1=Environment.getExternalStorageDirectory()+"/test.mp4";
videoView.setVideoPath(path1);
Log.v("系统录像", path+"读取"+path1+"下的视频文件");
}
}