1.打开图库:Intent.ACTION_PICK
2.打开照相机:MediaStore.ACTION_IMAGE_CAPTURE
3.打开摄像机:MediaStore.ACTION_VIDEO_CAPTURE
4.图库内容提供者: uri:MediaStore.Images.Media.EXTERNAL_CONTENT_URI
字段:MediaStore.Images.Media.DATA 代表图片的路径
设置静态常量,标记对回传的请求码
public static final int PIC_CODE=101;//图库请求码
public static final int VIDEO_CODE=102;//摄像机请求码
public static final int CAMERA_CODE=103;//照相机请求码
1.打开相机
private void open_camera() {
//创建Intent对象
Intent intent = new Intent();
//设置动作
intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
//手动保存图片
long l = System.currentTimeMillis();
file = new File("/sdcard/"+l+".jpg");
//使用内容提供者将图片插入到指定file
ContentResolver contentResolver = getContentResolver();//获得内容解析者
ContentValues contentValues = new ContentValues();
contentValues.put(MediaStore.Images.Media.DATA,file.getAbsolutePath());
Uri uri = contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues);
//设置一个输出参数,保证图片存入图库中
intent.putExtra(MediaStore.EXTRA_OUTPUT,uri);//设置文件输出uri,必须设置 不然照片不能保存到图库中
//开启intent
startActivityForResult(intent,CAMERA_CODE);
}
2.打开摄像机
private void open_video() {
//创建intent意图对象
Intent intent = new Intent();
//设置一个动作
intent.setAction(MediaStore.ACTION_VIDEO_CAPTURE);
//启动intent
startActivityForResult(intent,VIDEO_CODE);
}
3.打开图库
private void open_pic() {
//创建intent意图对象
Intent intent = new Intent();
//设置一个动作
intent.setAction(Intent.ACTION_PICK);
intent.setType("image/*");//打开所有的图片 如果设置为video/* 打开所有视频
startActivityForResult(intent,PIC_CODE);
}
4.回传对数据的处理
/***
*
* @param requestCode 请求码
* @param resultCode 结果码 OK
* @param data 返回的数据:包含选择照片
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==PIC_CODE&&resultCode== Activity.RESULT_OK){//请求码对应,结果码是OK
//获得数据
Uri data1 = data.getData();
//将uri展示在ImageView
imageView.setImageURI(data1);
}else if(requestCode==VIDEO_CODE&&resultCode==Activity.RESULT_OK){
Uri data1 = data.getData();
Toast.makeText(this, ""+data1, Toast.LENGTH_SHORT).show();
videoView.setVideoURI(data1);//设置资源
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {//准备完毕
@Override
public void onPrepared(MediaPlayer mp) {
videoView.start();//播放视频
}
});
}else if(requestCode==CAMERA_CODE&&resultCode==Activity.RESULT_OK){
Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());
imageView.setImageBitmap(bitmap);
}
}
项目理解:
1.在我们选中,跳转的时候intent,会带着我们选中的Uri,我们可以通过Uri来获取我们想要的数据
2.在保存照片,或者视频做跳转的时候,Intent或带着这个值存储的,数据库,
通过Uri来获取Data,
3.相机没有储存的功能所以必须有我们自己创建添加到数据库