Android FileObserver
当我们要对一个文件或者文件夹进行监听的时候,我们可以使用android api中的android.os.FileObserver ,下面就来介绍如何使用。
1. 如何实现一个FileObserver
首先extends FileObserver 然后覆盖其构造器,最后覆盖
onEvent(int event,String path)方法:
例子
public class MyFileObserver extends FileObserver {
/**
path 是所监听的文件夹或者文件名。
*/
public MyFileObserver (String path) {
super(path);
}
@Override
public void onEvent(int event, String path) {
}
1. }
2.
3. 监听你所关心的事件:在onEvent(int event,String path)中,通过匹配event的值,可以捕获所发生的事件
例子:
public void onEvent(int event, String path) {
switch(event){
case android.os.FileObserver.ALL_EVENTS:
//所有事件 相当于default的功能
/**
* 相关操作
*/
break;
case android.os.FileObserver.CREATE:
//文件被创建
/**
* 相关操作
*/
break;
case android.os.FileObserver.OPEN :
//文件被打开
/**
* 相关操作
*/
break;
case android.os.FileObserver.ACCESS:
//打开文件后,读文件内容操作
/**
* 相关操作
*/
break;
case android.os.FileObserver.MODIFY:
//文件被修改
/**
* 相关操作
*/
break;
case android.os.FileObserver.ATTRIB:
//未明操作
/**
* 相关操作
*/
break;
case android.os.FileObserver.CLOSE_NOWRITE:
//没有编辑文件,关闭
/**
* 相关操作
*/
break;
case android.os.FileObserver.CLOSE_WRITE:
//编辑完文件,关闭
/**
* 相关操作
*/
break;
case android.os.FileObserver.DELETE:
//文件被删除
/**
* 相关操作
*/
break;
case android.os.FileObserver.MOVED_FROM:
//文件被移动
/**
* 相关操作
*/
break;
}
}
注意:在onEvent(int event,String path)中,path返回的是发生事件的文件名,并且不带路径,当我们在某个事件当中需要找到发生事件的文件就要结合它的路径才能找得到。
4. 筛选监听事件,防止进入死循环
上面列出了FileObserver所能监听的大部分事件,但是在实际应用当中并不需要监听全部事件,只选择我们自己关心的事件来进行监听就可以,过多的事件监听会导致程序逻辑的混乱。
例如在监听文件被访问的操作时,打开这个文件
case android.os.FileObserver.ACCESS:
//打开文件后,读文件内容操作
File file = new File(filePath+File.separator+path);
String data = readFile(file);//读取文件内容操作
break;
当程序执行到readFile(file)时,onEvent()方法会再被触发,然后匹配到是ACCESS事件,又回到readFile(file)操作,结果导致死循环。
5. 启用文件监听器.
在实现了自己的文件监听器后,下面介绍如何恰当得启用它。
MyFileObserver mObserver = new MyFileObserver("sdcard/myobserver/file");
mObserver.startWatching();//启用文件监听器
取得文件监听器的对象,调用startWatching()开始监听。一开始我也以为就这么简单,后来在使用的时候,发现一旦在做批量任务的时候,文件监听器就不响应了。
所以这是后需要在逻辑处理模块添加线程:
public void onEvent(int event, String path) {
switch(event){
case android.os.FileObserver.CLOSE_WRITE:{
new Thread(){
public void run(){
//批量任务
}
}.start();
}
}
这样在新的文件发生改变或者新的文件被创建的时候,文件监听器仍然可以检测到。
6. 停止。调用FileObserver中的stopWatching() 就ok。
分享到:
相关推荐
android 7.1 FileObserver 使用demo以及apk签名为系统app的工具
NULL 博文链接:https://xiaxingwork.iteye.com/blog/1915566
根据"如数家珍"app的公开源码修改的小栗子,能简单实现sd卡的文件修改状态监听,亲测可用,初学者可以学习一下~ 共同进步~
Android FileObserver 检测文件变化demo,Android FileObserver 检测文件其实也是基于linux的inotify实现的,是从linux内核2.6.13开始加进来的,不过FileObserver检测的文件还是有局限的,似乎只能检测到SD卡的文件...
Android创建文件实现对文件监听,可以用android.os.FileObserver;类来实现,下面是实现代码,内有注释
Android文件目录监控技术总结,使用FileObserver进行监听,循环遍历……
RxFileObserver Android的周围的React性包装器 下载 Gradle: ...例子 订阅在外部存储目录中执行的任何文件系统更改: File sdCard = Environment .... Observable< FileEvent> sdCardFileEvents = RxFileObserver ....
File Observer 2 方向:Web开发工具 功能:监控文件夹,自动刷新页面 Config 默认监控文件夹: dev 配置文件:file-observer.properties Web Socket 默认端口:8293 文件改变时,返回值: IS_CHANGED ...
Android系统没有对用户截屏行为提供回调的...在android中,我们可以通过FileObserver来监听目录变化,先来看看如何使用 private static final File DIRECTORY_PICTURES = new File(Environment.getExternalStorageDire
主要介绍了android 监听SD卡文件变化的实现代码,需要的朋友可以参考下
1. 前言 Android系统没有直接对截屏事件监听的接口,也没有广播,只能...本文使用的测试手机,一加2(One Plus 2)。 2. FileObserver 添加权限: <uses-permission android:name=android.permission.READ_EXTERNA
modify form 可以识别服务器转发的下载链接 Android平台面向开发者提供了Download...已发现的问题:用fileobserver观察文件大小来更新界面UI会出现严重的跳帧现象,跳帧几十到一百多不等,已限制最快更新为100ms
record pcm raw audio in Android using AudioRecord classCalendarOps: Android calendar operations FileObserver: Android FileObserver APITabMenu: A customized tab-based menuYACamRecorder: A video ...
监听sdcard目录的下的状态变化,当发生sdcard下的文件访问,能实时反馈至界面中(参考FileObserver类) 当前瓶颈:无法将SDcard状态改变的信息实时传输到手机界面 可能的解决方法:获取日志信息,过滤出sdcard状态...
Basic4Android最新最全类库,包含B4a上市后截止到2017.04.24的库文件。希望对大家有帮助。以下为文件列表。 2012/08/09 周四 01:55 35,901 ABExtDrawing.jar 2012/08/09 周四 01:55 191,079 ABExtDrawing.xml ...