Skip to content

Instantly share code, notes, and snippets.

@yukpiz
Created February 13, 2014 01:47
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yukpiz/b498019d55042ffe85b0 to your computer and use it in GitHub Desktop.
Save yukpiz/b498019d55042ffe85b0 to your computer and use it in GitHub Desktop.

Android FileObserver

  • ディレクトリを監視し、イベントを補足する
  • 監視を開始/終了する

    + 2014.2.18

    FileObserverのインスタンスはstartWatching()により ディレクトリ監視が開始されると、 指定されたディレクトリに対するイベントを捕捉し続けるが、 インスタンスがガベージコレクションにより破棄された時、 ディレクトリの監視は停止されてしまう。

    回避策はFileObserverのインスタンスをstatic変数に保持しGCの対象から外す事で 継続したイベントの補足が可能になります。

FileObserverサブクラスの作成


FileObserverクラスを継承したImportFileObserverクラスを作成する。


  • ImportFileObserver.java
package observer.file;

import android.os.FileObserver;

public class ImportFileObserver extends FileObserver {
   public ImportFileObserver(String filepath) {
      super(filepath);
   }

   @Override
   public void onEvent(int event, String path) {
      switch (event) {
         case FileObserver.ACCESS:
            Log.d("Observer Event", "ACCESS");
            break;
         case FileObserver.ALL_EVENTS:
            Log.d("Observer Event", "ALL_EVENTS");
            break;
         case FileObserver.ATTRIB:
            Log.d("Observer Event", "ATTRIB");
            break;
         case FileObserver.CLOSE_NOWRITE:
            Log.d("Observer Event", "NOWRITE");
            break;
         case FileObserver.CLOSE_WRITE:
            Log.d("Observer Event", "WRITE");
            break;
         case FileObserver.CREATE:
            Log.d("Observer Event", "CREATE");
            break;
         case FileObserver.DELETE:
            Log.d("Observer Event", "DELETE");
            break;
         case FileObserver.DELETE_SELF:
            Log.d("Observer Event", "DELETE_SELF");
            break;
         case FileObserver.MODIFY:
            Log.d("Observer Event", "MODIFY");
            break;
         case FileObserver.MOVED_FROM:
            Log.d("Observer Event", "MOVED_FROM");
            break;
         case FileObserver.MOVED_TO:
            Log.d("Observer Event", "MOVED_TO");
            break;
         case FileObserver.MOVE_SELF:
            Log.d("Observer Event", "MOVE_SELF");
            break;
         case FileObserver.OPEN:
            Log.d("Observer Event", "OPEN");
            break;
      }
   }
}

監視を開始/終了する


  • MainActivity.java
private static ImportFileObserver observer = null;

- (省略)

String filepath = "$filepath";
this.observer = new ImportFileObserver(filepath);
this.observer.startWatching(); //ディレクトリ監視の開始
this.observer.stopWatching(); //ディレクトリ監視の終了
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment