【拍照截圖】Android 系統拍照和截圖
阿新 • • 發佈:2019-02-06
tjstudy:寫在前面:
android 6.0 許可權未處理,這裡只是對拍照和截圖的過程進行了知識的清理總結。
android6.0 許可權處理,可跳轉到:
大力哥的,http://download.csdn.net/detail/qq137722697/9602707
執行時,請求所有需要的6.0的許可權,檔案中直接有使用方法。
1、呼叫系統拍照
//1、圖片儲存路徑
String path = Environment.getExternalStorageDirectory().getPath();
file = new File(path, "/temp.jpg" );
imageUri = Uri.fromFile(file);
//.....2、在點選事件中開啟拍照意圖
//呼叫系統相機進行拍照 用系統的東西 隱式意圖
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); //指定呼叫相機拍照後的照片儲存路徑
//3、onActivityResult()方法裡面進行拍照成功與否的判斷並進行處理
switch (requestCode) {
case CAMERA_OK:
if (resultCode == RESULT_OK) {
showMess("拍照成功");
//顯示拍照的照片
Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri));
ivGlobal.setImageBitmap(bitmap);
} else {
showMess("拍照失敗");
}
break;
}
2、呼叫系統截圖
//1、圖片儲存路徑
String path = Environment.getExternalStorageDirectory().getPath();
file = new File(path, "/temp.jpg");
imageUri = Uri.fromFile(file);
//.....2、在點選事件中開啟截圖意圖
//呼叫系統功能進行截圖 用系統的東西 隱式意圖
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(imageUri, "image/*");
// 下面這個crop = true是設定在開啟的Intent中設定顯示的VIEW可裁剪
intent.putExtra("crop", "true");
// aspectX aspectY 是寬高的比例,這裡設定的是正方形(長寬比為1:1)
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
// outputX outputY 是裁剪圖片寬高
intent.putExtra("outputX", 200);
intent.putExtra("outputY", 200);
intent.putExtra("return-data", false);//設定之後 onActivityResult 中data 就為null了
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);//設定裁剪之後的圖片儲存位置
startActivityForResult(intent, CUT_OK);
//3、onActivityResult()方法裡面進行拍照成功與否的判斷並進行處理
switch (requestCode) {
case CUT_OK:
if (resultCode == RESULT_OK) {
showMess("裁剪成功");
try {
//將裁剪好的圖片顯示到介面上
Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri));
ivGlobal.setImageBitmap(bitmap);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
} else {
showMess("裁剪失敗");
}
break;
}
拍照成功,然後截圖失敗了。。。
測試手機:sonyE6886(6.0許可權已經處理)
測試情況:情況1,拍照成功,但是截圖失敗。情況2,單純的使用已有圖片進行截圖,失敗,並且導致原圖為0byte,不可見。
失敗原因:截圖過程中,源圖Uri和裁剪後的結果圖Uri位置衝突
解決方案:使用不同的Uri
3、個人理解記錄
拍照和截圖,都是通過隱式意圖來開啟系統介面,拍照需要設定圖片的儲存路徑,截圖則需要設定圖片的原始檔和截圖之後圖片的儲存路徑,這裡設定的都是URI。
系統的拍照和截圖是兩個系統功能,拍照之後想要截圖,可以在確定以及能夠拍照成功的基礎上再次呼叫系統的截圖功能(在onActivity裡面進行拍照成功與否的判斷)。
4、呼叫系統拍照並且截圖
在拍照成功的時候,進行截圖。
//重要程式碼和上面一致
switch (requestCode) {
case CAMERA_OK:
if (resultCode == RESULT_OK) {
showMess("拍照成功");
clipPhoto();//開啟截圖
} else {
showMess("拍照失敗");
}
break;
case CUT_OK:
if (resultCode == RESULT_OK) {
showMess("裁剪成功");
try {
Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri));
ivGlobal.setImageBitmap(bitmap);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
} else {
showMess("裁剪失敗");
}
break;
}