- ディレクトリを監視し、イベントを補足する
監視を開始/終了する
+ 2014.2.18FileObserverのインスタンスはstartWatching()により ディレクトリ監視が開始されると、 指定されたディレクトリに対するイベントを捕捉し続けるが、 インスタンスがガベージコレクションにより破棄された時、 ディレクトリの監視は停止されてしまう。
回避策はFileObserverのインスタンスをstatic変数に保持しGCの対象から外す事で 継続したイベントの補足が可能になります。
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(); //ディレクトリ監視の終了