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.相機沒有儲存的功能所以必須有我們自己創建添加到數據庫