Android 監聽文件夾
阿新 • • 發佈:2018-09-17
external 分享 tex xtend 目錄 nac 觸發 改變 @override
在一次Android
和pc
端的通訊過程中,我們放棄了adb forward
來實現socket
通訊。而是使用adb push
文件,我監聽文件夾... 都學習一下很有必要
本篇簡單Android
監聽文件夾的方式FileObserver
。
FileObserver簡介
Android.os
包下的FileObserver
類是一個用於監聽文件訪問、創建、修改、刪除、移動等操作的監聽器,基於Linux
的INotify
。
FileObserver
是個抽象類,必須繼承它才能使用。每個FileObserver
對象監聽一個單獨的文件或者文件夾,如果監視的是一個文件夾,那麽文件夾下所有的文件和級聯子目錄的改變都會觸發監聽的事件。
FileObserver
使用
package com.example.chenjy.chenjy; import android.os.FileObserver; import utils.LogUtil; /** * Created by chenjy on 2017/5/2. */ public class FileListener extends FileObserver { private EventCallback callback; public FileListener(String path) { super(path); } public void setEventCallback(EventCallback callback){ this.callback = callback; } @Override public void onEvent(int event, String path) { LogUtil.i("FileListener", "path="+path); switch (event){ // 文件被訪問 case FileObserver.ACCESS: LogUtil.i("FileListener", "ACCESS"); break; // 文件被修改 case FileObserver.MODIFY: LogUtil.i("FileListener", "MODIFY"); break; // 文件屬性被修改 case FileObserver.ATTRIB: LogUtil.i("FileListener", "ATTRIB"); break; // 可寫文件被close case FileObserver.CLOSE_WRITE: LogUtil.i("FileListener", "CLOSE_WRITE"); if(callback != null){ callback.onEvent(path); } break; // 不可寫文件被close case FileObserver.CLOSE_NOWRITE: LogUtil.i("FileListener", "CLOSE_NOWRITE"); break; // 文件被打開 case FileObserver.OPEN: LogUtil.i("FileListener", "OPEN"); break; // 文件被移走 case FileObserver.MOVED_FROM: LogUtil.i("FileListener", "MOVED_FROM"); break; // 文件被移進來 case FileObserver.MOVED_TO: LogUtil.i("FileListener", "MOVED_TO"); break; // 文件被刪除 case FileObserver.DELETE: LogUtil.i("FileListener", "DELETE"); break; // 創建新文件 case FileObserver.CREATE: LogUtil.i("FileListener", "CREATE"); break; // 自刪除 case FileObserver.DELETE_SELF: LogUtil.i("FileListener", "DELETE_SELF"); break; // 自移動 case FileObserver.MOVE_SELF: LogUtil.i("FileListener", "MOVE_SELF"); break; } } public interface EventCallback{ void onEvent(String path); } }
FileObserver
調用
package com.example.chenjy.chenjy; import android.app.Activity; import android.os.Bundle; import android.os.Environment; public class MainActivity extends Activity { public static final String FILE_PATH = Environment.getExternalStorageDirectory().getAbsolutePath()+"/Pictures"; private FileListener fileListener = new FileListener(FILE_PATH); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); fileListener.startWatching(); } }
運行app
。
然後通過adb push
向android
設備push
圖片。
Android 監聽文件夾