Android 监听文件夹
在一次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
图片。