FileObserver 是一個用來監(jiān)聽文件變化的抽象類喂链,子類必須實(shí)現(xiàn)事件處理的方法 onEvent(int, String) 椭微。由于最近做了兩個項目都用上就查閱了官方文檔迟杂,寫下這篇文章記錄一下排拷。
每一個 FileObserver 實(shí)例用來監(jiān)聽一個文件或者文件夾火架,當(dāng)文件夾被監(jiān)聽時,任意子文件或文件夾的訪問或修改都會觸發(fā)事件骡男。注意:FileObserver 不能監(jiān)聽到二級子文件夾或文件的變化隔盛。
先附上官方的 FileObserver 鏈接:https://developer.android.google.cn/reference/android/os/FileObserver.html
- 所有常量 (可監(jiān)聽的事件)
Constant | 描述 |
---|---|
ACCESS | 文件被讀取 |
ATTRIB | 權(quán)限 所有者 時間戳被修改 |
CLOSE_NOWRITE | 打開并關(guān)閉了文件夾(未修改) |
CLOSE_WRITE | 打開并關(guān)閉了文件夾(有修改) |
CREATE | 監(jiān)控的文件夾下創(chuàng)建了子文件或文件夾 |
DELETE | 監(jiān)控的文件夾下刪除了子文件或文件夾 |
DELETE_SELF | 被監(jiān)控的文件或文件夾被刪除访得,監(jiān)控停止 |
MODIFY | 文件被修改 |
MOVED_FROM | 被監(jiān)控文件夾有子文件或文件夾移走 |
MOVED_TO | 被監(jiān)控文件夾有子文件或文件夾被移入 |
MOVE_SELF | 被監(jiān)控文件或文件夾被移動 |
OPEN | 文件或文件夾被打開 |
ALL_EVENTS | 以上所有事件 |
-
方法說明
-
Public constructors 構(gòu)造方法
-
FileObserver(String path, int mask)
為 path 路徑的文件或者文件夾創(chuàng)建一個文件觀察者。
path--文件路徑 , mask--監(jiān)聽事件類型 -
FileObserver(String path)
創(chuàng)建一個文件觀察者
== FileObserver(path, FileObserver.ALL_EVENTS).)
-
-
Public methods 公共方法
-
onEvent(int event, String path) -----void
抽象方法,當(dāng)監(jiān)聽到文件變化會回調(diào)此方法
event 事件類型 , path 觸發(fā)事件的文件相對監(jiān)聽文件的路徑( 某些情況 path 可能為 null , 像監(jiān)聽的是一個文件,或者 MOVE_SELF 等事件)
-
startWatching( ) ----void
開始監(jiān)聽
-
stopWatching( ) -----void
結(jié)束監(jiān)聽
-
-
-
基本用法示例
// TestFileObserver 文件觀察類 class TestFileObserver extends FileObserver { // path 為 需要監(jiān)聽的文件或文件夾 public TestFileObserver(String path) { super(path,FileObserver.ALL_EVENTS); } @Override public void onEvent(int event, String path) { // 如果文件修改了 打印出文件相對監(jiān)聽文件夾的位置 if(event==FileObserver.MODIFY){ Log.d("edong",path); } } } // 使用方法 1.初始化 TestFileObserver TestFileObserver testFileObserver = new TestFileObserver("/sdcard/Download/File"); // 2.開始監(jiān)聽 testFileObserver.startWatching();
上述代碼只是一個簡單用法的介紹,在我工作的項目中用到的情況是
智能家居設(shè)備是 Android 系統(tǒng)贩幻,在底層實(shí)現(xiàn)了一套喚醒機(jī)制,當(dāng)設(shè)備喚醒時底層會將喚醒狀態(tài)族壳,喚醒角度等值寫入一個文件仿荆。應(yīng)用層使用 FileObserver 來監(jiān)聽這個文件,當(dāng)文件變化時認(rèn)為設(shè)備被喚醒令境,就去讀取該文件獲取喚醒相關(guān)的數(shù)值抛蚁。
?
?