2011-08-13 44 views
2

我需要构建一个处理/ sdcard目录中的文件的android应用程序。对于每个文件,我想给标记一个文件的功能。我相信使用本地数据库来处理这个。问题是,如果用户重命名文件,我会丢失标签,因为它们与前一个文件名相关。有没有办法来避免这个问题,比如 - 为文件设置/获取唯一标识符,即使文件被重命名也不会改变?Android:处理文件系统中的文件的奇怪问题

回答

3

您需要的是数据库中每个文件的唯一ID,并将所有标记与该文件名的而不是链接起来(不管您是否喜欢,可以生成整数或散列或随机数将一切正常,重要的是没有其他文件具有相同的ID,否则标签将显示这两个文件)。

在数据库中,您可以保留一个将文件名称链接到ID的表格(或者,更灵活地将ID与文件路径相链接,并在需要时从中提取名称)。当你添加一个标签时,像链接文件名那样将它链接到该标识符。当您加载文件标签时,它会花费您一个简单的ID数据库查找,但允许您在一个位置重命名文件(而不必遍历数据库查找文件名)。

要让人们重命名文件,您可以创建一个FileObserver来观察MOVE_SELF事件(这将重命名 - 重命名与移动相同)。您可以覆盖FileObserver.onEvent()方法,您可以在其中使用文件的新名称更新数据库。您需要在单独的线程中执行此操作,以避免锁定用户界面。它也不会在您的活动后持续存在,因此您希望有一个服务来保存FileObserver并更新数据库,或者只是在启动活动时进行某种扫描。

+0

问题是,当用户在我的应用程序外重命名文件(比如在归档应用程序中)时,我失去了我的链接,不是吗? – Cris

+0

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

+0

很好的答案,谢谢! – Cris