[의문 풀이] - 안드로이드가 시스템 카메라를 호출하고 onActivityresult () 리셋이 데이터를 비워 줍니다
3543 단어 의혹을 풀고 의혹을 풀다.
Intent cameraIntent = new Intent("android.media.action.IMAGE_CAPTURE");
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT,getImageUri());
cameraIntent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 0);
activity.startActivityForResult(cameraIntent,Constants.CAMERA_REQUEST_CODE);
//onActivityResult ,
if (resultCode != RESULT_OK) {resizeImage
return;
} else {
switch (requestCode) {
case Constants.CAMERA_REQUEST_CODE:
if (FileUtil.isSdCardExist()) {
SelectPhotoUtil.resizeImage(MyPortraitActivity.this, data.getData());
} else {
Toast.makeText(this, " ", Toast.LENGTH_SHORT).show();
}
break;
}
데이터를 비워 둡니다!!!왜 그랬을까, 원본 코드 좀 봐
// First handle the no crop case -- just return the value. If the
// caller specifies a "save uri" then write the data to it's
// stream. Otherwise, pass back a scaled down version of the bitmap
// directly in the extras.
if (mSaveUri != null) { // mSaveUri, uri
OutputStream outputStream = null;
try {
outputStream = mContentResolver.openOutputStream(mSaveUri);
outputStream.write(data);
outputStream.close();
setResult(RESULT_OK); // RESULT_OK, intent
finish();
} catch (IOException ex) {
// ignore exception
} finally {
Util.closeSilently(outputStream);
}
} else {
Bitmap bitmap = createCaptureBitmap(data);
// RESULT_OK, Intent , Extra key data,value bitmap
setResult(RESULT_OK, new Intent("inline-data").putExtra("data", bitmap));
finish();
}
즉, MediaStore를 지정하면EXTRA_OUTPUT의 uri 값이 되돌아오는 데이터 값은 비어 있어 어이가 없어...
무슨 해결 방법이 있습니까?
1. 출력 경로(MediaStore.EXTRA OUTPUT)를 지정하지 않고 데이터에서 직접 가져오기
2. 출력 경로를 지정하고 리셋에서 경로에서 그림을 직접 가져옵니다