2013-07-02 2 views
3

촬영 한 이미지를 저장하기 위해 카메라의 의도를 알려주기 :나는이 일을 해요

intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
final File storage = Environment.getExternalStorageDirectory(); 
final Uri uri = Uri.fromFile(new File(storage, System.currentTimeMillis() + ".jpg")); 
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri); 
startActivityForResult(intent, id); 

그 사진을 얻을 처리하기를, 나는이 수행 그러나

private String getLastImagePath() { 
    final String[] imageColumns = { MediaStore.Images.Media._ID, 
      MediaStore.Images.Media.DATA }; 
    final String imageOrderBy = MediaStore.Images.Media._ID + " DESC"; 
    final Cursor imageCursor = getContentResolver().query(
      MediaStore.Images.Media.EXTERNAL_CONTENT_URI, imageColumns, 
      null, null, imageOrderBy); 
    if (imageCursor.moveToFirst()) { 
     final String fullPath = imageCursor.getString(imageCursor 
       .getColumnIndex(MediaStore.Images.Media.DATA)); 
     return fullPath; 
    } else { 
     throw new RuntimeException(); 
    } 
} 

을, 나는 메시지를 받고 계속 이처럼 : 나는 갤러리를 선택하면 사진이없는

07-02 14:46:54.751: E/BitmapFactory(23119): Unable to decode stream: java.io.FileNotFoundException: /storage/emulated/0/DCIM/Camera/IMG_20130702_144653.jpg: open failed: ENOENT (No such file or directory) 

, 그래서 내 생각은 의도가 MediaStore.EXTRA_OUTPUT를 무시한다는 것입니다 값.

내 카메라 솔루션을 작성하지 않아도되는 작업이 있습니까? 이처럼

+2

이 사용 권한을 menifest에 넣어주세요

+0

정말 필요한가요? 내 말은 인터넷 권한이없는 앱에 공유 인 텐트를 사용하면 여전히 Twitter에서 공유 할 수 있다는 뜻입니다. – razielsarafan

답변

3

사용 :

의지 :

   Intent takePicture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
      startActivityForResult(takePicture, 0); 

그 결과를 가져올 수 :

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

     switch(requestCode) { 
     case 0: 
      if(resultCode == RESULT_OK){ 
      Uri selectedImage = imageReturnedIntent.getData(); 
       String[] filePathColumn = {MediaStore.Images.Media.DATA}; 

        Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null); 
        cursor.moveToFirst(); 

        int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
        //file path of captured image 
        filePath = cursor.getString(columnIndex); 
        //file path of captured image 
        File f = new File(filePath); 
        filename= f.getName(); 

        Toast.makeText(SiteViewFieldCreate.this, "Your Path:"+filePath, 2000).show(); 
        Toast.makeText(SiteViewFieldCreate.this, "Your Filename:"+filename, 2000).show(); 
        cursor.close(); 

       //Convert file path into bitmap image using below line. 
        // yourSelectedImage = BitmapFactory.decodeFile(filePath); 


        //put bitmapimage in your imageview 
        //yourimgView.setImageBitmap(yourSelectedImage); 
     } 
     break; 
    } 
    } 

manifest.xml이 추가.

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.CAMERA" /> 


<uses-feature android:name="android.hardware.camera" /> 
<uses-feature android:name="android.hardware.camera.autofocus" /> 

희망이 있으면 해결책이 될 것입니다.

+0

"selectedImage"란 무엇입니까? – razielsarafan

+0

이미지 결과 받기. – Nirmal

+1

Nvm, 보지 못했습니다. 'imageReturnedIntent.getData();'는 null을 반환합니다. – razielsarafan

1

Nirmals 솔루션은 Android 4.x (Apilevel 15)를 제외한 모든 장치에서 정상적으로 작동합니다. 버그 인 것처럼 보이지만 imageReturnedIntent.getData()은 항상 null을 반환합니다! (에뮬레이터와 장치의 에뮬레이터) 찍은 사진은 externaldir에도 저장되지 않으므로 최신 id 또는 최대 date_addedContentResolver에서 가져 오려는 시도는 실패합니다 (카드에서 최신 사진을 반환하지만 사진은 반환하지 않음)! 현재이 문제에 대한 해결책이 없습니다 ... 경로을 Apilevel 15에서 찍은 사진은 불가능합니다. 드로어 블을 가져 와서 직접 저장할 수는 있지만 ...