2011-08-13 75 views
2

我需要構建一個處理/ sdcard目錄中的文件的android應用程序。對於每個文件,我想給標記一個文件的功能。我相信使用本地數據庫來處理這個。問題是,如果用戶重命名文件,我會丟失標籤,因爲它們與前一個文件名相關。有沒有辦法來避免這個問題,比如 - 爲文件設置/獲取唯一標識符,即使文件被重命名也不會改變?Android:處理文件系統中的文件的奇怪問題

回答

3

您需要的是數據庫中每個文件的唯一ID,並將所有標記與該文件名的而不是鏈接起來(不管您是否喜歡,可以生成整數或散列或隨機數將一切正常,重要的是沒有其他文件具有相同的ID,否則標籤將顯示這兩個文件)。

在數據庫中,您可以保留一個將文件名稱鏈接到ID的表格(或者,更靈活地將ID與文件路徑相鏈接,並在需要時從中提取名稱)。當你添加一個標籤時,像鏈接文件名那樣將它鏈接到該標識符。當您加載文件標籤時,它會花費您一個簡單的ID數據庫查找,但允許您在一個位置重命名文件(而不必遍歷數據庫查找文件名)。

要讓人們重命名文件,您可以創建一個FileObserver來觀察MOVE_SELF事件(這將重命名 - 重命名與移動相同)。您可以覆蓋FileObserver.onEvent()方法,您可以在其中使用文件的新名稱更新數據庫。您需要在單獨的線程中執行此操作,以避免鎖定用戶界面。它也不會在您的活動後持續存在,因此您希望有一個服務來保存FileObserver並更新數據庫,或者只是在啓動活動時進行某種掃描。

+0

問題是,當用戶在我的應用程序外重命名文件(比如在歸檔應用程序中)時,我失去了我的鏈接,不是嗎? – Cris

+0

好點 - 用更多的信息更新我的答案。 –

+0

很好的答案,謝謝! – Cris