2015-04-08 52 views
2

所以我寫了一個意圖,應該啓動畫廊查看傳遞到意圖與它的Uri的圖像。此代碼工作正常,到底做什麼,我想它做的事:Android Intents - SetDataAndType和setData和setType之間的區別?

private Intent makeGalleryIntent(String pathToImageFile) { 
    Intent mGalleryIntent = new Intent(Intent.ACTION_VIEW); 
    mGalleryIntent.setDataAndType(Uri.parse("file://" + pathToImageFile), "image/*"); 
    return mGalleryIntent; 
} 

但是,當我試圖發揮它(只是嘗試不同的東西出來,因爲我學習),這個代碼在模擬器上要麼崩潰,因爲它可以「T推出的相機,或者只是拉了我的畫廊我的物理設備上:

private Intent makeGalleryIntent(String pathToImageFile) { 
    Intent mGalleryIntent = new Intent(Intent.ACTION_VIEW); 
    mGalleryIntent.setData(Uri.parse("file://" + pathToImageFile)); 
    mGalleryIntent.setType("image/*"); 
    return mGalleryIntent; 
} 

他們都看起來像他們應該做同樣的事情。另外,有沒有一種方法可以使用Intent構造函數正確設置所有這些?

+0

非常好的問題!我確實有這個問題,而且這真的很煩人,你會認爲一個「設置」API不會有隱藏的副作用。 – ebyrob

回答

8

從文檔:Intent Documentation

要設置只有數據URI,呼叫使用setData()。要僅設置MIME類型,請調用setType()。如有必要,您可以使用setDataAndType()顯式設置它們。

警告:如果要設置URI和MIME類型,請不要調用setData()和setType(),因爲它們都會使另一個值無效。始終使用setDataAndType()來設置URI和MIME類型。

我從來沒有真正得到答案,爲什麼他們會相互抵消。如果你有一個想法,爲什麼id喜歡聽到它!