2013-12-13 1 views
0

카메라를 시작하여 특정 폴더의 새 파일에 저장된 사진을 외부 저장소에 저장합니다.카메라로 캡처 한 이미지를 디코딩하는 중에 오류가 발생했습니다.

onActivityResult() 메서드에서 BitmapFactory.decodeFile()을 사용하여 파일의 이미지를 디코딩하려고하면 반환되는 이미지는 null입니다. 파일이 아직 완성되지 않았기 때문에 (즉, 카메라의 프로세스가 이미지 저장을 완료하지 못했기 때문)? 이 문제를 어떻게 해결할 수 있습니까? 여기

이있는 내가 카메라를 실행하고 코드입니다 :

private void launchCamera() { 
    //create folder 
    File imagesFolder = new File(
      Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), 
      Consts.MEDIA_EXTERNAL_FOLDER); 
    if(!imagesFolder.exists()) 
     imagesFolder.mkdirs(); 
    String fileName = "pic_"+Consts.CAMERA_DATE_FORMAT.format(new Date()); 
    File image = null; 
    try { 
     image = File.createTempFile(fileName, ".jpg", imagesFolder); 
    } catch(IOException e) { 
     Log.e(TAG, "Error creating new file."); 
    } 
    capturedImageURI = Uri.parse(image.getAbsolutePath()); 

    //launch camera 
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    intent.putExtra(MediaStore.EXTRA_OUTPUT, capturedImageURI); 
    startActivityForResult(intent, CAMERA_ACTION); 
} 

을 그리고 나는 onActivityResult()의 이미지를 얻을 때이다 :

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    switch (requestCode) { 

     case CAMERA_ACTION: 
      getContentResolver().notifyChange(capturedImageURI, null); 
      File f = new File(capturedImageURI.toString()); 

      decodedBitmap = Helper.decodeSampledBitmapFromResource(filePath); 
      ImageView imageView = new ImageView(this); 
      imageView.setImageBitmap(decodedBitmap); 

      break; 
    } 

답변

1

가 어떻게이 문제를 해결할 수 ?

File

, AFAIK, 당신은 capturedImageURI.toString()에서 얻을 것이다 무엇 인 file:/// URL 형식을 이해하지 못합니다. File을 재생성하는 대신 이미 생성 한 것을 사용하십시오.

+0

정말 고마워요. 처음에는 "그건 사실이 아니야, 그건 uri 형식이 아니야"라고 생각하고 있었고 사실 uri.toString()의 결과는 file.getAbsolutePath()와 동일하지만 try와 for 이것이 작동하는 이유. 유일한 것은 갤러리에서 내 폴더에있는 새 사진을 볼 수 없다는 것입니다. 즉, getContentResolver(). notifyChange (capturedImageURI, null)가 작동하지 않습니다. \ –

+1

@AlessandroRoaro :'MediaScannerConnection' 및'scanFile()'를 사용하여'MediaStore'가 여러분의 사진을 색인 할 수있게합니다. 나는 카메라 앱이 그렇게 할 것으로 기대하지만, 카메라 앱은 많이 * 있고, 타사 앱에서 호출 할 때는 아마 * 많지 않을 수도 있습니다. 또한, 파일에 대한 색인을 생성하는 데 지연이있을 수 있으며, 'ContentObserver'가 통지를 받음은 물론, 다른 작업이 장치에서 수행되는 것과 마찬가지입니다. – CommonsWare

+0

MediaScannerConnection에 대해 알지 못했습니다. 다시 도움을 받으십시오. –

관련 문제