[의문 풀이] - 안드로이드가 시스템 카메라를 호출하고 onActivityresult () 리셋이 데이터를 비워 줍니다

어제 시스템 카메라를 호출해 사진을 찍다가 문제가 생겼어요. 카메라가 사진을 찍고 돌아온 후 바로 물러났어요. 그럼 문제는 어디에 있을까요?먼저 당시의 코드를 살펴보자.
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. 출력 경로를 지정하고 리셋에서 경로에서 그림을 직접 가져옵니다

좋은 웹페이지 즐겨찾기