Android 文件或文件夾內容改變監聽器(FileObserver)


一. 概述:

android.os包下的FileObserver類是一個用於監聽文件訪問、創建、修改、刪除、移動等操作的監聽器,基於linux的INotify。

FileObserver是個抽象類,必須繼承它才能使用。每個FileObserver對象監聽一個單獨的文件或者文件夾,如果監視的是一個

文件夾,那么文件夾下所有的文件和級聯子目錄的改變都會觸發監聽的事件。

二. 監聽的事件類型:

(1)ACCESS,即文件被訪問。

(2)MODIFY,文件被修改。

(3)ATTRIB,文件屬性被修改,如 chmod、chown、touch 等。

(4)CLOSE_WRITE,可寫文件被 close。

(5)CLOSE_NOWRITE,不可寫文件被 close。

(6)OPEN,文件被 open。

(7)MOVED_FROM,文件被移走,如 mv。

(8)MOVED_TO,文件被移來,如 mv、cp。

(9)CREATE,創建新文件。

(10)DELETE,文件被刪除,如 rm。

(11)DELETE_SELF,自刪除,即一個可執行文件在執行時刪除自己。

(12)MOVE_SELF,自移動,即一個可執行文件在執行時移動自己。

(13)CLOSE,文件被關閉,等同於(IN_CLOSE_WRITE | IN_CLOSE_NOWRITE)。

(14)ALL_EVENTS,包括上面的所有事件。

注:上面的所有靜態變量都是FileObserver靜態屬性。


三. 例:

(1)創建目錄監聽器:

import android.os.FileObserver;   
import android.util.Log;   
  
/**  
 * SD卡中的目錄創建監聽器。  
 * 
 * @author mayingcai
 */  
public class SDCardListener extends FileObserver {   
 
       public SDCardListener(String path) { 
              /*  
               * 這種構造方法是默認監聽所有事件的,如果使用 super(String,int)這種構造方法,  
               * 則int參數是要監聽的事件類型.  
               */  
              super(path);   
       }   
   
       @Override  
       public void onEvent(int event, String path) {          
              switch(event) {   
                     case FileObserver.ALL_EVENTS:   
                            Log.d("all", "path:"+ path);   
                            break;   
                     case FileObserver.CREATE:   
                            Log.d("Create", "path:"+ path);   
                            break;   
              }   
      }   
}

(2)給目錄設置監聽器:

SDCardListener listener = new SDCardListener("目錄");   

//開始監聽   
listener.startWatching();
   
/*  
 * 在這里做一些操作,比如創建目錄什么的  
 */  

//停止監聽   
listener.stopWatching();  

四. 注意事項:

 FileObserver對象必須保持一個引用,確保不被垃圾收集器回收掉,否則就不會觸發事件,這里可以考慮使用Service服務。

 

本文轉自:http://blog.csdn.net/mayingcai1987/article/details/6210904


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM