2011-09-01 5 views
18

내 액티비티에서 기본 카메라를 호출 한 다음 onActivityResult를 처리 중입니다. 내 코드는 사진을 찍을 때 확인이없는 LG Ally에서 잘 작동하는 것 같습니다. 그러나 Nexus S에서 동일한 앱을 실행하면 내 활동으로 돌아 가기 전에 '확인', '다시 시도'또는 '취소'를 묻는 메시지가 표시됩니다. "취소"가 작동하는 동안 사진을 저장하지 않고 내 활동으로 돌아 오면 "확인"은 내 활동으로 돌아 가지 않고 어떤 효과도없는 것 같습니다. 아래기본 카메라 동작이 완료되지 않음 OK 버튼을 누름시

내 코드 :

private void captureImage() { 

    String state = Environment.getExternalStorageState(); 
    if (Environment.MEDIA_MOUNTED.equals(state)) { 
     File path = new File(Environment.getExternalStorageDirectory().getPath() + "/Images/" + (new UserContextAdapter(this)).getUser() + "/"); 
     path.mkdirs(); 
     File file = new File(path, "Image_Story_" + mRowId.toString() + ".jpg"); 

     newImageUri = Uri.fromFile(file); 

     Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
     intent.putExtra(MediaStore.EXTRA_OUTPUT, newImageUri); 

     startActivityForResult(intent, CAPTURE_IMAGE); 
    } 

} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent intent) { 

    switch (requestCode) { 
    case CAPTURE_IMAGE: 
     switch (resultCode) { 
     case 0: 
      Log.i("CAPTURE", "Cancelled by User"); 
      break; 
     case -1: 
      mImageUri = newImageUri; 
      setImageFromUri(); 
      } 
    } 
+0

기억 권한을 부여했는지 확인하십시오. –

답변

15

는 난 그냥 똑같은 문제를 가지고 생각합니다.

사진을 저장할 경로가 올바르지 않으면 카메라가 앱으로 돌아 가지 않습니다. 디렉토리가 존재한다는 것을 확인하면 모든 것이 잘 동작합니다. 디렉토리가 존재하는지 확인한 다음 작동해야합니다.

- 편집 -

난 그냥 당신이 path.mkdirs();를 호출하지만 그것이 작동하지 않는 생각,보고

. 안드로이드 문서에서 읽을 수 있듯이 "이 메소드는 실패하면 IOException을 던지지 않으므로 호출자는 반환 값을 확인해야합니다." 디렉토리가 실제로 있는지 확인하십시오.

+0

흠, 오래 전부터 제 경우에는 문제를 어떻게 수정했는지 기억하지 못합니다. 해결책을 게시 해 주셔서 감사합니다.^ –

+2

안녕하세요, 실제로 저는 할 수 있습니다. 폴더의 존재를 확인하십시오. 실제로 존재하고 그림이 거기에 저장되어 있지만 여전히 OK 버튼을 누르면 내 활동으로 돌아 오지 않습니다. 그래서, @ qedejavu가 쓴 것은 해결책이 아닌 것 같습니다. 어떻게 문제를 해결했는지 기억할 수 있습니까? –

+2

네이티브 카메라 앱에 저장하려는 디렉토리에 대한 액세스 권한이없는 경우에도 마찬가지입니다. 예를 들어, 네이티브 카메라 앱에서 앱의 개인 저장 용량에 액세스 할 수 없습니다. –

1

HTH 또한, 위 Environment.getExternalStorageDirectory().getPath()을 사용하는 경우 응용 프로그램이 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />을 가지고 있는지 확인하십시오.

Uri newImageUri = null; 

File path = new File(Environment.getExternalStorageDirectory().getPath() + "/Images/"); 

path.mkdirs(); 

boolean setWritable = false; 

setWritable = path.setWritable(true, false); 

File file = new File(path, "Image_Story_" + System.currentTimeMillis() + ".jpg"); 

newImageUri = Uri.fromFile(file); 

Log.i("MainActivity", "new image uri to string is " + newImageUri.toString()); 

Log.i("MainActivity", "new image path is " + newImageUri.getPath());    

Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 

intent.putExtra(MediaStore.EXTRA_OUTPUT, newImageUri); 

startActivityForResult(intent, REQUEST_CODE_CAPTURE_IMAGE); 

사례 2 :

String fileName = "" + System.currentTimeMillis() + ".jpg"; 

ContentValues values = new ContentValues(); 

values.put(MediaStore.Images.Media.TITLE, fileName); 

values.put(MediaStore.Images.Media.DESCRIPTION, "Image capture by camera"); 

values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg"); 

Uri imageUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); 

Log.i("MainActivity", "new image uri to string is " + imageUri.toString()); 

Log.i("MainActivity", "new image path is " + imageUri.getPath()); 

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 

intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); 

intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); 

startActivityForResult(intent, REQUEST_CODE_CAPTURE_IMAGE); 

내가 넥서스에 카메라를 통해 이미지를 저장할 수 있어요이 = 도움이

희망)

1

사례 1을 확인하시기 바랍니다 위의 경우 모두 경우 1 : a. 이미지는 사용자 정의 폴더에 저장됩니다. b. "System.currentTimeMillis()"가 ("new Date(). toString()"으로 변경되면 이미지가 저장되지 않고 카메라가 내 활동으로 돌아 가지 않습니다. (아마도 "System.currentTimeMillis"에 공백이 없기 때문에 "new Date(). toString()"에 몇 가지 특수 문자와 공백이있을 수 있습니다) 경우 2 : a. 이미지는 사진 디렉토리가 또는 당신이 not.If하지 귀하의 전화 저장 검사에서, 하나의 일을 내가 같은 problem.You이있는 모든

0

에 카메라 폴더에

감사 한 저장 그러한 라이브러리를 가지고 수동으로 만들어라.

희망이 당신을 위해 작동합니다.

관련 문제