Android實現監聽文件和目錄動態

jopen 11年前發布 | 22K 次閱讀 Android Android開發 移動開發

       android.os下的FileObserver類是一個用于監聽文件訪問、創建、修改、刪除、移動等操作的監聽器,基于linux的inotify。 FileObserver 是個抽象類,必須繼承它才能使用。每個FileObserver對象監聽一個單獨的文件或者文件夾,如果監視的是一個文件夾,那么文件夾下所有的文件和級聯子目錄的改變都會觸發監聽的事件。
    所能監聽的事件類型如下:
    ACCESS,即文件被訪問
    MODIFY,文件被 修改
    ATTRIB,文件屬性被修改,如 chmod、chown、touch 等
    CLOSE_WRITE,可寫文件被 close
    CLOSE_NOWRITE,不可寫文件被 close
    OPEN,文件被 open
    MOVED_FROM,文件被移走,如 mv
    MOVED_TO,文件被移來,如 mv、cp
    CREATE,創建新文件
    DELETE,文件被刪除,如 rm
    DELETE_SELF,自刪除,即一個可執行文件在執行時刪除自己
    MOVE_SELF,自移動,即一個可執行文件在執行時移動自己
    CLOSE,文件被關閉,等同于(IN_CLOSE_WRITE | IN_CLOSE_NOWRITE)
    ALL_EVENTS,包括上面的所有事件
     

       這些都是FileObserver的靜態共有屬性。下面舉個例子說明一下其用法。比如,我要監聽sd卡的目錄創建事件,新建一個類SDCardListener繼承FileObserver:

    import android.os.FileObserver;
import android.util.Log;

/** 
 * sd卡上的目錄創建監聽器 
 * @author way 
 * 
 */  
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;  
        }  
    }  
}  </pre> <p></p>

onEvent是回調,系統監聽到事件后會觸發此事件,參數event就是上面所說的事件類型,根據類型,我們可以做相應的處理,參數path就是觸發事件的目錄。

      然后使用它:

    SDCardListener listener = new SDCardListener("/sdcard");
//開始監聽
listener.startWatching();
/*

* 在這里做一些操作,比如創建目錄什么的 
*/  
//最后停止監聽  
listener.stopWatching();   </pre><span style="font-size:18px;">如果要在onEvent中做較多操作,<strong>最好用線程去做</strong> ,以免因為阻塞接收不到后面的事件。</span> <p></p>


      最后補充一點,比較重要
      FileObserver對象必須保持一個引用,確保不被垃圾收集器回收掉,否則就不會觸發事件了

 

來自:http://blog.csdn.net/way_ping_li/article/details/8556738

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!