2013-02-22 3 views
1

Camera Intent에서 찍은 사진의 파일 경로를 String으로 가져 오려고하지만 String filePath는 항상 null입니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?Camera Intent의 파일 경로

 public void onClick(View arg0) { 
     switch (arg0.getId()) {  
     case R.id.btnImageCapture: 
      Intent openCamera = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
       startActivityForResult(openCamera, OPEN_CAMERA); 
       break; 
      } 
     } 



     @Override 
     protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     switch(requestCode){ 
     case OPEN_CAMERA: 
      if (resultCode == RESULT_OK && data != null) { 
       Uri captureImage = data.getData(); 
       String filePath = captureImage.getPath(); 
       break; 
       } 
      } 
     } 

답변

1

카메라로 찍은 이미지를 얻는 방법입니다.

나는 전에 파일을 생성하고 이미지가 다음 저장됩니다 때

File externalFile = new File("Whatever you want the path to be..."); 
Uri uriSavedImage=Uri.fromFile(externalFile); 
Intent launchcameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
launchcameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage); 
startActivityForResult(launchcameraIntent,CAMERA_PIC_REQUEST); 

는 결과가 수신 그런 때 .. 내 파일에 저장됩니다.

protected void onActivityResult(int requestCode,int resultCode, Intent data) { 
     if (resultCode == Activity.RESULT_OK) { 
      if (requestCode == CAMERA_PIC_REQUEST) { 
        Bitmap photo = BitmapUtils.decodeFileForDisplay(new File("Whatever your file's path is"); 
      } 
     } 
} 
+0

나는 그것을 시도 할 것이다. 편집 : 그것은 나를 위해 작동하지 않습니다. –

+0

왜 당신은 그게 당신을 위해 일하지 않을 것이라고 생각합니까? CAMERA_PIC_REQUEST는 인 텐트의 id이며'private static final int CAMERA_PIC_REQUEST = 123;'과 같이 정의 할 수 있습니다. BitmapUtils.decode ... 행은 사용자 정의 메서드입니다. BitmapFactory.decodeFile을 사용하십시오. – StuStirling

+0

네,하지만 저에게는 효과가 없습니다. 나는 심지어 오류 메시지 또는 뭔가를 얻을하지 않습니다. 그것은 단지 아무것도하지 않고있다. SDCARD에 WRITE_PERMISSIONS를 사용해 보았지만 여전히 작동하지 않습니다. –

1

매개 변수로 captureImage 열린 우리당을 통과하는 다음과 같은 시도 :

public String getRealPathFromURI(Uri contentUri) { 
     String[] projx = { MediaStore.Images.Media.DATA }; 
     Cursor cursor = managedQuery(contentUri, projx, null, null, null); 
     int column_index = cursor 
      .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
    cursor.moveToFirst(); 
    return cursor.getString(column_index); 
} 

편집 : GetData의()가 일부 장치에 null를 돌려 일반적인 버그가

. 이를 막으려면 미리 삽입 된 Uri를 사용해야합니다. 예 : 결과를 얻기

Intent cameraIntent = new Intent(
       android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
preinsertedUri = getContentResolver().insert(
       MediaStore.Images.Media.EXTERNAL_CONTENT_URI, 
       new ContentValues()); 

     startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST); 

는 : 좋아

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

    switch (requestCode) { 

    case CAMERA_PIC_REQUEST: 

     if (resultCode != 0 && data != null) { 

      Uri imageUri = preinsertedUri; 
      } 
       break; 
       } 
+0

이 앱이 다운됩니다. java.lang.RuntimeException : 결과 전달 실패 ResultInfo {who = null, request = 2, result = -1, data = 의도 {act = 인라인 데이터 (엑스트라 있음)}} to {my.test.app.MainActivity} : java.lang.NullPointerException –

+0

Uri 행 뒤에서이 메소드를 호출하지 않았습니다. Uri captureImage = data.getData(); ? 당신은 null이라는 이유로 캡쳐 영상을 털어놨습니까? – Droidman

+0

예, Uri의 captureImage 이후에 메서드를 호출했지만, 이제는 Uri이 null이라는 사실을 알게되었습니다. 실수는 무엇일까요? –