2013-07-24 32 views
8
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    filePath = getOutputMediaFile(FileColumns.MEDIA_TYPE_IMAGE); 
    File file = new File(filePath); 
    Uri output = Uri.fromFile(file); 
    Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
    i.putExtra(MediaStore.EXTRA_OUTPUT, output); 
    startActivityForResult(i, RETURN_FILE_PATH); 
} 

    @Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    //data is always null here. 
    //requestCode = RETURN_FILE_PATH; 
    //resultCode = Activity.RESULT_OK; 
} 

我檢查值文件輸出烏里,兩者都是細並且將所捕獲的圖像實際上在那個位置存在。onActivityResult返回null數據的圖像捕獲

但是在onActivityResult中返回的數據始終是null,即使在捕獲圖像之後。

編輯:

我查了一下這個問題:

onActivityResult returns with data = null

它說:

當你通過傳遞EXTRAOUTPUT用相機意圖 數據參數保存圖像onActivityResult裏面總是返回null。所以, 而不是使用數據檢索圖像,使用文件路徑 檢索位圖。

也許該解決方案將爲我工作。但是,對於相同的場景,上面的代碼是一個工作代碼。

回答

18

根據此post當您預先插入uri時,數據爲空。這意味着你已經在這裏定義了你的輸出uri:

i.putExtra(MediaStore.EXTRA_OUTPUT, output); 

所以當你得到一個Activity.RESULT_OK;只需通過其已知的網址加載拍攝的照片即可。

+0

是的,剛剛看到帖子。但相同的代碼在過去6個月工作,爲什麼突然現在它的行爲是這樣的:( –

+1

不幸的是,我不是這個主題的專家把我猜測它的硬件設備相關的特定功能。在三星設備上有不同的行爲:http://stackoverflow.com/q/8248327/1965084 – alex

0

只需將此代碼放入onActivityResult。我在某些設備上遇到過同樣的問題,這解決了我的問題。希望這也能幫助你。

try { 

    Uri selectedImage = output; 

    if (selectedImage == null) 
     return; 

    String[] filePathColumn = { MediaStore.Images.Media.DATA }; 
    Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null); 
    cursor.moveToFirst(); 
    int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
    String picturePath = cursor.getString(columnIndex); 
    cursor.close(); 

} catch (Exception e) { 
    return; 
}  

您將得到picturePath變量和URI的圖片路徑selectedImage變量。

1

試試這個代碼這對我有用。

else if(requestCode == Constant.PICK_FROM_CAMERA) 
      { 

       if (resultCode == Activity.RESULT_OK) 
       { 
        if(data!=null) 
        { 
         mImageCaptureUri = data.getData(); 
         //path= mImageCaptureUri.getPath(); 
         try 
         { 
          path = getPath(mImageCaptureUri,Wonderlistpage.this); //from Gallery 
         } 
         catch(Exception e) 
         { 
          path = mImageCaptureUri.getPath(); 
          Log.i("check image attach or not", e.toString()); 
         } 

         String arr[] = path.split("/"); 
         int i; 
         String k = null; 
         for(i=0;i<arr.length;i++) 
         { 
          k=arr[i];  
         } 
         photoname="_"+String.valueOf(System.currentTimeMillis()) +k; 
         if(setprofileimage_sendimagewithmessage==1) 
         { 
          performCrop(mImageCaptureUri); 
         } 
         else 
         { 
           loading_details="CAMERA"; 
           new performBackgroundTask33().execute(); 
         } 
        } 
        else 
        { 
file1 = new File(Environment.getExternalStorageDirectory(), 
            String.valueOf(System.currentTimeMillis()) + "_FromCamera.jpg"); 

         Uri mImageCaptureUri = Uri.fromFile(file1); 
         try 
         { 
          path = getPath(mImageCaptureUri,Wonderlistpage.this); //from Gallery 
         } 
         catch(Exception e) 
         { 
          path = mImageCaptureUri.getPath(); 
          Log.i("check image attach or not", e.toString()); 
         } 
         String arr[] = path.split("/"); 
         int i; 
         String k = null; 
         for(i=0;i<arr.length;i++) 
         { 
          k=arr[i];  
         } 
         photoname="_"+String.valueOf(System.currentTimeMillis()) +k; 
         if(setprofileimage_sendimagewithmessage==1) 
         { 
          performCrop(mImageCaptureUri); 
         } 
         else 
         { 
           loading_details="CAMERA"; 
           new performBackgroundTask33().execute(); 
         } 

        } 

        //new UploadTask().execute(); 
       } 
      } 
1

嘗試下面的代碼

 { 
      final String[] imageColumns = { MediaStore.Images.Media._ID,MediaStore.Images.Media.DATA }; 

      final String imageOrderBy = MediaStore.Images.Media._ID + " DESC"; 
      Cursor imageCursor = managedQuery(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, imageColumns, null, null, imageOrderBy); 
      imageCursor.moveToFirst(); 
      do { 
       String fullPath = imageCursor.getString(imageCursor.getColumnIndex(MediaStore.Images.Media.DATA)); 
       if (fullPath.contains("DCIM")) { 

        //get bitmap from fullpath here. 
        return; 
       } 
      } 
      while (imageCursor.moveToNext()); 
0

如果你的活動已在您的清單launchmode作爲singleInstance,那麼你將面臨這個問題。嘗試改變它。因爲它每次取消結果。

相關問題