2012-09-16 49 views
1

從攝像機意圖拍攝照片後,我在'onActivityResult'方法中獲取數據時遇到問題。android camera intent returns no data

這裏是我的方法,其呼叫相機意圖:

private void __initCamera() { 

    String path = Environment.getExternalStorageDirectory() + "/vault/images/"; 

    File dir = new File(path); 
    if (!dir.exists()) { 
     dir.mkdirs(); 
     dir = new File(path); 
    } 
    String[] content = dir.list(); 
    String fileName = (content.length + 1) + ".jpg"; 
    File file = new File(path, fileName); 
    if (!file.exists()) { 
     try { 
      file.createNewFile(); 
     } catch (IOException ex) { 
      Log.e("my_app", ex.getMessage()); 
     } 
    } 

    Uri uri = Uri.fromFile(file); 
    Intent i = new Intent("android.media.action.IMAGE_CAPTURE"); 
    i.putExtra(MediaStore.EXTRA_OUTPUT, uri); 
    startActivityForResult(i, 8765); 
} 

這裏是我的onActivityResult方法:

RETURNCODE:-1(should be: 1, right?),

例外:java.io.FileNotFoundException: No content provider: #Intent;action=inline-data;end

data.toURI() :#Intent;action=inline-data;end

@Override 
protected void onActivityResult(int requestCode, int returnCode, Intent data) { 

    try { 

     Bitmap bitmap = Media.getBitmap(getContentResolver(), Uri.parse(data.toURI())); 
     FileOutputStream out = new FileOutputStream(file); 
     bitmap.compress(Bitmap.CompressFormat.JPEG, 50, out); 
     bitmap.recycle(); 
     out.close(); 
    } catch (Exception ex) { 
     Log.e("TROLL", ex.toString()); 
    } 
} 
+0

我不認爲你應該調用createnewfile,相機應用程序將爲你創建文件 – nandeesh

+0

我剛剛嘗試過,當我看到filenotfoundexception ...兩個解決方案(與創建文件/無)給予相同的異常:java.io.FileNotFoundException:No內容提供者:#Intent; action = inline-data; end –

回答

3

此:

Bitmap bitmap = Media.getBitmap(getContentResolver(), Uri.parse(data.toURI())); 

應該是這樣的:

Bitmap bitmap = (Bitmap) data.getExtras().get("data"); 

至少,這就是我常檢索圖像。另外,我會建議檢查正確的請求代碼,而不是在那裏使用包含全部的異常。

0

接受的答案只提供了一種獲取圖像縮略圖的方法,而不是全尺寸的縮略圖。 要獲得完整大小的圖片,你應該提供一個URI,其中相機將存儲這樣的形象:

intent.putExtra(MediaStore.EXTRA_OUTPUT, mUri); 

然後在你的onActivityResult您可以使用您保存的URI來獲取圖像:

Bitmap bitmap = Media.getBitmap(getContentResolver(), Uri.parse(mUri)); 

這裏是Android documentation