2011-02-14 37 views
8

我正在開發一個應用程序,其中從本機相機應用程序拍攝的圖像。將被顯示給用戶。 我做的代碼是:Android三星:相機應用程序不會返回intent.getData()

/* Intent */ 
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); 
startActivityForResult(intent, TAKE_PICTURE); 

/* Result */ 
onActivityResult(int requestCode, int resultCode, 
     Intent returnIntent) { 
    if(requestCode == TAKE_PICTURE) { 
     //picture from Camera 
     if (resultCode == Activity.RESULT_OK) { 
      if(returnIntent != null) { 
       try { 
        // Get the file path where the image is stored. 
        // This runs fine on all devices, except Samsung ones. 
        Uri selectedImage = returnIntent.getData(); 

        if(selectedImage == null) { 
         if(returnIntent.getExtras() != null && 
          returnIntent.getExtras().get(AppConstants.DATA) != null) { 

          // But, I get the image Bitmap here. Means the image is stored in disk. 
          Bitmap bmp = (Bitmap) returnIntent.getExtras().get(AppConstants.DATA); 
         } 
        } 
       } catch (Exception e) { 
        // 
       } 
      } 
     } 
    } 
} 

這裏的問題是,上面的代碼工作正常,在我嘗試了所有設備(HTC的,SE的),但它在三星的人莫名其妙地失敗。 「Uri selectedImage = returnIntent.getData();」永不退貨。由於我的整個應用程序都是基於這種文件路徑存儲邏輯構建的,因此我無法繼續。 有沒有解決方案的人。

+0

您是否找到解決方案? – Sharj

回答

11

請參閱Specify filename for picture to be taken以獲取用於指定Intent的EXTRA_OUTPUT參數的代碼,該參數允許您指定圖片的文件名。記住活動結果被調用時的文件名,如果intent.getData爲NULL,則使用該文件名

如果您閱讀該錯誤報告中的其他註釋,您將會意識到在Android上拍攝的問題有多少。

+0

我嘗試「記住文件名」,但當ActivityForResult被調用時,我的成員變量也爲空... – ogborstad

+0

@ogborstad將您的變量聲明爲靜態字段,並且不會初始化爲null,否則該變量將被覆蓋。 – Merlin

+0

我知道這個問題已經發布了一段時間了,但是你知道我會如何去做這個從圖片庫獲取圖片嗎?顯然,在少數手機上,Uri uri = data.getData();'總是返回null(S3 mini,W8L..something)。 – Sebek

3

最好的辦法是生成一個你想要保存圖片的文件路徑並將它存儲在一個成員變量中。然後,在調用相機活動時,將其作爲Uri放入MediaStore.EXTRA_OUTPUT中。

確保重寫onSaveInstanceState()和onRestoreInstanceState()並正確保存/恢復此路徑。如果系統決定在此期間重新啓動活動(這很可能是由於方向更改和/或內存不足導致的),這將確保您仍然擁有它。

+0

你可以給我一個如何在上面的例子中處理savedInstanceState()和onRestoreInstanceState()的例子嗎? – Darpan

相關問題