1

:MediaStore.EXTRA_OUTPUT는 항상 가로 모드에서 널 (null)이 들어 난 다음 줄과 같이 카메라 영상이 저장되어야하는 경로 카메라를 열고 설정하려고

takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(this.mFileImgPath)) 

내가 가지고있는 문제를 , 내가 세로 모드에서 카메라를 누른 다음 'onActivityResult'정상적으로 호출되며 'mFileImgPath'체크 때 null이 아니야하는 동안 사진을 찍었습니다. 그러나 동일한 코드를 사용하여 가로 모드에서 사진을 찍으면 'onActivityResult'가 호출되지만 항상 'mFileImgPath'는 null입니다.

나는 디버거를 사용하고 'mFileImgPath'는 Lanscape 모드로 사진을 찍으려고하면 항상 null입니다. pleae는 디버거의 스크린 샷을 살펴 봅니다.

가로 모드에서 'mFileImgPath'가 항상 null 인 이유를 알려주십시오. 및 스크린 샷과 같이

enter image description here

에서, 'mFileImgPath는'null의 디버거

Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     this.mFileImgPath = new File(App.instance.getOutDir() + "/" + new Date().getTime()); 
     Log.e(TAG, "mFileImgPath" + mFileImgPath); 

     takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(this.mFileImgPath)); 

코드

을 olve하는 방법과 내가 steo을 클릭하면 이상 디버거가 if-condition을 건너 뜁니다.

+0

'MediaStore.EXTRA_OUTPUT은 항상 Lanscape 모드에서 null을 포함합니다 .' 잘못된. 사실이 아니다. 경로의 String 변수가 null입니다. – greenapps

답변

1

이것은 내장 카메라로 작업 할 때 알려진 문제입니다. 이 문제를 해결하려면 onSaveInstanceState()onRestoreInstanceState()을 통해 URI를 유지해야합니다. 당신의 선언 startActivityForResult(intent, CAMERA_CAPTURE_IMAGE_REQUEST_CODE) 전에

  • 선언 intent.putExtra (..) 너무 : 이제

    intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); 
    startActivityForResult(intent, CAMERA_CAPTURE_IMAGE_REQUEST_CODE); 
    
  • 은 활동이이 방법을 넣어

     /* Storing the file url as it'll be null after returning from camera app */ 
    @Override 
    protected void onSaveInstanceState(Bundle outState) { 
        super.onSaveInstanceState(outState); 
    
        // save file url in bundle as it will be null on scren orientation changes 
        outState.putParcelable("file_uri", fileUri); 
    } 
    
    @Override 
        protected void onRestoreInstanceState(Bundle savedInstanceState)   { 
        super.onRestoreInstanceState(savedInstanceState); 
    // get the file url 
        fileUri = savedInstanceState.getParcelable("file_uri"); 
    } 
    
  • 에 액세스하지 마십시오.onActivityResult(int requestCode, int resultCode, Intent data)으로 설정하면 data 매개 변수가 null 일 가능성이 큽니다.

+0

감사합니다 ..하지만 당신은 "onActivityResult (int requestCode, int resultCode, Intent 데이터)에서 Intent에 액세스하려고 시도하지 마십시오. 매개 변수 데이터가 null 일 가능성이 큽니다." ..why 그것은 null 일 것입니까 ?? – user2121

+0

카메라를 시작하면 활동이 실제로 다시 시작되므로 uri가 null이됩니다. –

+0

괜찮아요 .. "onRestoreInstanceState"..를 사용하지 않고 "onSaveInstanceState"에 현재 상태를 저장 한 다음 onCreate에서 번들의 저장 인스턴스를 가져 오겠습니까 ?? – user2121

0

카메라 앱이 작동하면 활동이 중지 될 수 있습니다. 전면적이지 않은 활동은 언제든지 Android에 의해 종료 될 수 있습니다.

onSaveInstanceState를 @ 위에 올려 놓고 거기에 경로 변수의 값을 저장해야합니다. 그런 다음 onRestoreInstanceState에서 값을 검색하십시오.

+0

사례를 제공해 주실 수 있습니까? – user2121

+0

그 기능을 위해 Google을 사용 했습니까? 당신은 많은 예를 발견했을 것입니다. – greenapps