我無法獲得工作文件夾的縮略圖視圖。相反,我通過在文件夾中的第一個圖像上啓動畫廊來管理一些東西。
下面是我想要完成的描述。用戶從列表視圖中選擇特定的記錄。該記錄可以有幾張圖像與之相關聯。我希望能夠使用Nexus One上的酷炫的Gallery3D應用程序瀏覽這些圖像(現在使用多點觸控變焦!)。如果該記錄的圖像尚未緩存在設備的SD卡上,我會將其作爲zip文件下載。然後,我將該文件解壓縮到sdcard上的該記錄的緩存目錄。之後,我想要啓動畫廊並僅在該緩存目錄中顯示圖像。
執行下載和解壓壓縮文件到SD卡不是一個問題。但是,爲了讓畫廊工作,我必須將MediaScannerConnection與MediaScannerConnectionClient一起使用。在獲得掃描儀連接(這是一種flakey)之後,我繞過了緩存目錄中的所有文件,它們調用scanner.scanFile。
的MediaScannerConnectionClient#onScanCompleted將所得的URI附加到一個ArrayList成員變量。當整個過程完成後,我會啓動通過該列表中的第一個uri的畫廊。這將查看目錄中的第一個圖像。我寧願選擇縮略圖視圖,但這已經足夠好了。
我對這個解決方案並不完全熟悉。看起來,MediaScannerConnection異步工作,所以我的AsyncTask進行輪詢/休眠以查看它是否已完成掃描。
任何人都有與MediaScannerConnection不連接在第一次通話的問題?要解決此我做這樣的事情:
MediaScannerConnection scanner = ...;
for (int attempts = 0; attempts < MAX_ATTEMPTS; attempts++) {
scanner.connect();
if (scanner.isConnected()) { break; }
else {
try { Thread.sleep(5); }
catch (Exception e){}
}
}
if (!scanner.isConnected()) {
throw new IllegalStateException("Unable to establish media scanner connection!");
}
醜我知道,但我不知道爲什麼它有連接第一時間的麻煩。 : -/
UPDATE: 感謝jeffamaphone,我能夠轉儲醜陋的代碼。現在OnItemClickListener只是調用scanner.connect()。傳遞給掃描器構造函數的客戶機初始化DownloadAsyncTask,它在解壓文件並調用scanner.scanFiles(...)時更新ProgressDialog;
我認爲有一種方法可以做到這一點讓我調查一下 – 2010-02-10 19:44:20
您是否找到了解決方案 – 2013-03-11 14:11:31