5

ファイルの書き込みがいつ終了したかを知りたいので、それを使用しようとしていますFileObserver。私はこのようにやっています:

FileObserver observer = new FileObserver(imageUri.getPath()) {
        @Override
        public void onEvent(int event, String path) {
            if(event == FileObserver.CLOSE_WRITE)
                Log.d(TAG, "FILE: "+path);
        }
};
observer.startWatching();

imageUriは有効ですUri。ファイルを閉じると、次のログ エントリが表示されます。

FILE: null

なぜnullですか?ユーザーが複数のファイルを書き込む可能性があるため、どのファイルがイベントをトリガーしているかを知る必要があります。

ありがとう!

4

2 に答える 2

7

のドキュメントにonEvent()よると:

イベントをトリガーしたファイルまたはディレクトリの、メインの監視対象ファイルまたはディレクトリからの相対パス

だから、指定されたファイルまたはディレクトリはpathいつだと思います...null

元のパスを自分で追跡する必要があります。pathこのパスにofを追加しonEvent()てフル パスを取得します (ファイルを追跡していて、その値が常に である場合を除くnull)。

FileObserver observer = new FileObserver(imageUri.getPath()) {
    public String basePath;

    @Override
    public void onEvent(int event, String path) {
        String fullPath = basePath;
        if(path != null) {
            // Eventually add a '/' in between (depending on basePath)
            fullPath += path;
        }
        Log.d(TAG, "FILE: "+fullPath);
    }
};
observer.basePath = imageUri.getPath();
observer.startWatching();

例をできるだけコード スニペットに近づけるようにしました。ただし、 を拡張する本格的なクラスを作成する方がはるかに優れているため、FileObserverを格納するコンストラクターを追加できbasePath、クラス/インスタンスの外部から public フィールドにアクセスする必要はありません!

于 2013-02-19T09:01:00.453 に答える