一炒辉、概述
android.os包下面的FileObserver是一個用于監(jiān)聽文件訪問創(chuàng)建修改刪除移動等操作的監(jiān)聽器着裹,基于Linux的INotfy
FileObserver是個抽象類贷笛,必須要繼承它才能使用钉嘹,每個FileObserver
監(jiān)聽一個單獨的文件或者文件夾助被,如果監(jiān)聽的是一個文件夾蜕煌,那么文件夾下所有文件或者級聯(lián)子目錄的改變都會觸發(fā)監(jiān)聽事件派阱。
二、監(jiān)聽的事件類型
- ACCESS
即文件被訪問 - MODIFY
文件被修改 - ATTRIB
文件被修改屬性斜纪,如chmod贫母,chown,touch等 - CLOSE_WRITE
可寫文件被CLOSE - CLOSE_NOWRITE
不可寫文件被CLOSE - OPEN
文件被打開 - MOVED_FROM
文件被移走 - MOVED_TO
文件被移進(jìn) - CREATE
創(chuàng)建文件夾 - DELETE
文件被刪除 - DELETESELF
自刪除盒刚,即一顆各執(zhí)行文件在執(zhí)行時刪除自己 - CLOSE
文件被關(guān)閉腺劣,等同于(IN_CLOSE_WRITE|IN_CLOSE_NOWRITE) - ALLEVENTS
包括上面的所有事件
上面所有的靜態(tài)變量都是
FileObserver
的靜態(tài)屬性
三、例
- 創(chuàng)建目錄監(jiān)聽器
public class SDCardListener extends FileObserver(){
public SDCardListener(String path){
super(path);
}
@override
public onEvent(int event,String path){
switch(event){
case FileObserver.ALLEVENTS:
Log.d("all","path:"+path);
break;
case FileObserver.CREATE:
break;
}
}
}
- 給目錄設(shè)置監(jiān)聽器
SDCardListener listener = new SDCardListener("目錄")因块;
//開始監(jiān)聽
listener.startWatching();
/**
*在這里做一些操作橘原,比如創(chuàng)建目錄什么的
**/
//停止監(jiān)聽
listener.stopWatching();
四、注意事項
FileObserver對象必須保持一個引用涡上,確保不被垃圾回收器回收掉趾断,否則就不會觸發(fā)事件,這里可以考慮使用Service服務(wù)吓懈。