2009-10-09 78 views
5

的內容提供商消費的客戶端,我可以做這樣的事情,才能得到正確的InputStream中讀取圖片:從內容提供者返回內存映射的InputStream?

InputStream is = getContentResolver().openInputStream(pictureUri); 

這是一個很好的API,並會在服務器端,實際內容提供商導致調用:

public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException { 
    // Open a proper ParcelFileDescriptor, most likely using openFileHelper(uri, mode) 
} 

但是,如果映射到URI的圖片是不是要在文件系統中發現的,但作爲一個存儲資源,或在飛行中產生的。

我可以創建內存映射FileInputStream或其他任何東西,以便我不需要將臨時文件保存到磁盤,只是爲了能夠將其返回給我的內容提供者使用者?

回答

1

這很難。你可能能夠逃脫使用任何可以使用Socket接口的東西。我沒有做過,但是,這個是什麼讓我這麼認爲:

http://developer.android.com/reference/android/os/ParcelFileDescriptor.html#fromSocket(java.net.Socket)

和插座,在理論上,是互聯網資源,或任何東西......如果你願意在Socket級別工作。我可能會放棄並創建臨時文件。也許這使我成爲一個懦夫。

+0

也就是說可能工作的解決方案,但不是我想這樣做。我真的希望能夠持續使用'ContentResolver#openInputStream()'方法讀取各種遠程數據。無論服務器如何創建/獲取數據。這是一個不向客戶端公開服務器實現的問題。 – PeyloW 2009-10-12 09:44:25

+0

@PeyloW你找到了解決辦法嗎?我也在尋找解決方案。 – Sunny 2012-01-18 22:00:34

+0

@孫尼這不是一個黑客。所以我最終保存了臨時文件併發送了文件描述符。 – PeyloW 2012-01-19 08:21:43