我想發送使用我的應用程序使用發送意圖創建的圖像。 我看了很多這樣的意圖的例子,並注意到他們都使用外部存儲來存儲將使用意圖發送的臨時圖像文件。爲什麼使用Intent數據的外部存儲?
是否有任何特定的原因爲什麼使用外部存儲? 它在我看來像一個危險的選擇,因爲如果外部存儲沒有安裝,用戶將無法將圖像發佈到網絡,這感覺很奇怪。
此外,你會在哪裏保存你的應用程序的工作數據?在onPause()中,我將用戶正在處理的當前圖像保存在內部存儲中,但是您會建議將其存儲在外部存儲中嗎?
我想發送使用我的應用程序使用發送意圖創建的圖像。 我看了很多這樣的意圖的例子,並注意到他們都使用外部存儲來存儲將使用意圖發送的臨時圖像文件。爲什麼使用Intent數據的外部存儲?
是否有任何特定的原因爲什麼使用外部存儲? 它在我看來像一個危險的選擇,因爲如果外部存儲沒有安裝,用戶將無法將圖像發佈到網絡,這感覺很奇怪。
此外,你會在哪裏保存你的應用程序的工作數據?在onPause()中,我將用戶正在處理的當前圖像保存在內部存儲中,但是您會建議將其存儲在外部存儲中嗎?
這很常見,因爲圖像可能相當大。在某些設備中,內部存儲器有點寶貴(因此Apps2SD的普及)。此外,有時您可能希望在您的應用以外的用戶可以訪問這些圖像。如果真的只是暫時的,你應該考慮使用getCacheDir()
或getExternalCacheDir()
。
有關存儲信息,請參閱this doc。該文檔中有code以查看是否可以使用外部存儲,如果要使用內部和外部回退。
噢,主要的原因,但在你的情況下,只是你的內部存儲塊只能訪問你的應用程序。如果發送意向不屬於您的應用程序的組件,它將無法訪問您的內部存儲區域。
圖像是字節數組格式。當您直接發送時,可能需要時間(即,如果您正在遠程服務器上發送)。有時應用程序可能會掛起。因此,爲了避免這種順序編程,開發人員使用並行代碼,這裏有一個代碼將圖像保存在存儲設備中,另一個代碼用於上傳部分。
還有一個好處是,直接發送會導致數據丟失,同時在外部存儲器上保存可防止出現這種情況。
原因是Android中的IPC數據有一個限制 - 大約1MB。這意味着,如果您在意圖的額外內容中添加了更多內容,則當您嘗試使用此意向啓動活動時,將會出現錯誤。所以通過意圖傳遞圖像的唯一方法是將指針(URL,文件名)傳遞給實際圖像。由於私有文件只對應用程序可見,因此您必須存儲到外部(共享)存儲或傳遞內容提供程序URI(當然,您需要編寫內容提供程序)。共享存儲是更簡單的方法。
是的,圖像只存儲在那裏能夠發送一個Uri發送意圖,以便允許用戶發佈它在Twitter/Facebook /無論。之後我會刪除它。如果我使用[openFileOutput()],我無法將其提供給其他應用程序(http://developer.android.com/reference/android/content/Context.html#openFileOutput%28java.lang.String,%20int% 29)與[MODE_WORLD_WRITEABLE](http://developer.android.com/reference/android/content/Context.html#MODE_WORLD_WRITEABLE)? – Pooks
是的,的確如此,你可以用'MODE_WORLD_WRITEABLE'或'MODE_WORLD_READABLE'來創建它,它應該可以工作。在您的場景中使用內部存儲器時,我沒有發現任何內在*錯誤*,只是試圖解釋爲什麼所有示例都使用外部。 – kabuko