2011-08-13 12 views
2

/sdcardディレクトリにあるファイルを扱うアンドロイドアプリを構築する必要があります。各ファイルに対して、私はファイルにタグを付けるような機能を与えたい。私はこれを処理するためにローカルDBを使用すると考えています。問題は、ユーザがファイルの名前を変更すると、前のファイル名に関連しているのでタグが失われることです。この問題を避ける方法はありますか?たとえば、ファイルの名前が変更されても変更されないファイルの一意の識別子を取得または設定しますか?Android:ファイルシステムのファイルを扱う際の奇妙な問題

答えて

3

あなたの必要とするのは、データベース内の各ファイルの一意のIDで、そのIDを持つすべてのタグをにリンクする代わりに、のファイル名です(ただし、好きなだけ生成できます。整数またはハッシュまたは乱数重要なのは、他のファイルが同じIDを持っていないということです。そうでなければ、両方のファイルにタグが表示されます)。

データベースには、ファイルの名前をIDにリンクする1つのテーブルを保持できます(または、より柔軟にファイルのパスにIDをリンクし、必要に応じてIDから名前を抽出できます)。タグを追加するときは、そのIDをファイル名と同じようにリンクします。ファイルのタグを読み込む際に、IDデータベースの参照は簡単ですが、ファイル名を探しながらデータベースを移動する必要はありません。

ファイルの名前を変更するユーザーをキャッチするには、MOVE_SELFイベント(名前の変更 - 名前の変更は移動と同じです)を確認するためにFileObserverを作成します。 FileObserver.onEvent()メソッドをオーバーライドして、新しい名前のデータベースでデータベースを更新することができます。別のスレッドでこれを行い、UIをロックしないようにします。また、アクティビティの後も持続しないので、FileObserverを保持してデータベースを更新するサービスを持つか、アクティビティが起動されたときに何らかのスキャンが行われるようにすることができます。

+0

問題は、ユーザーが私のアプリ(アーカイブアプリで)の外にファイルの名前を変更するとリンクが失われてしまうのですか? – Cris

+0

良い点 - いくつかの情報で私の答えを更新しました。 –

+0

素晴らしい回答、ありがとうございます! – Cris