2013-07-02 123 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上,所以任何嘗試從ContentResolver獲取最新的id或最大的date_added都將失敗(從卡中返回最新照片,但不會拍攝照片)! 目前我對這個問題沒有解決......似乎是不可能得到路徑對Apilevel 15拍攝的畫面(雖然它仍然有可能得到的繪製,並通過自己保存)...

相關問題