2013-02-22 79 views
1

我想獲取圖片的文件路徑與Camera Intent作爲字符串,但字符串filePath始終爲空。我究竟做錯了什麼?從相機意圖文件路徑

 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

好吧,我會嘗試。編輯:它不適合我。 – 2013-02-22 14:43:17

+0

你爲什麼覺得它不適合你? CAMERA_PIC_REQUEST是意圖的ID,可以像這樣定義:private static final int CAMERA_PIC_REQUEST = 123;'。 BitmapUtils.decode ...行是一種自定義方法。使用BitmapFactory.decodeFile – StuStirling 2013-02-22 14:47:37

+0

是的,但它不適合我。我甚至不會收到錯誤消息或其他內容。它只是無所事事。我也嘗試使用WRITE_PERMISSIONS作爲SDCARD,但它仍然不起作用。 – 2013-02-22 14:57:02

1

嘗試以下通過你captureImage URI作爲參數:

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()返回在某些設備上零一個共同的錯誤。你需要使用預先插入的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 = Intent {act = inline-data(has extras)}}傳遞給活動{my.test.app.MainActivity} :java.lang.NullPointerException異常 – 2013-02-22 14:55:44

+0

是否在調用Uri後調用此方法captureImage = data.getData(); ?您是否將captureImage Uri視爲空? – Droidman 2013-02-22 14:58:58

+0

是的,我在Uri captureImage之後調用了這個方法,但是現在我發現Uri是空的。什麼可能是錯誤? – 2013-02-22 15:08:45