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。
分享到:
相关推荐
通过学习和实践FileObserver的使用以及系统APK的签名过程,开发者可以更深入地理解Android系统的内部运作,提升应用的功能和安全性。同时,掌握这些技能对于进行系统级应用开发或者需要监控文件系统变动的场景非常有...
下面将详细介绍`FileObserver`的使用方式以及与相机文件夹监控相关的知识。 首先,`FileObserver`的实例化需要提供一个路径和一个观察事件的位掩码。路径可以是文件或者目录,而位掩码定义了你关心的事件类型,如`...
这通常可以通过使用`FileObserver`类来实现。`FileObserver`是Android提供的一种轻量级机制,用于监视指定目录下的文件系统事件。下面,我们将深入探讨如何使用`FileObserver`来监听SD卡上的文件变动。 首先,了解`...
对于更高版本,可能需要使用`FileObserver`的替代方案,如`ContentObserver`,或者使用文件系统的WatchService API。 总结来说,`FileObserver`是Android平台上一个便捷的工具类,能够帮助开发者监控文件变化事件,...
Android文件目录监控技术总结,使用FileObserver进行监听,循环遍历……
以下是一个简单的`FileObserver`使用示例: ```java public class FileObserverService extends Service { private FileObserver fileObserver; @Override public void onCreate() { super.onCreate(); ...
Android系统中监听SD卡文件变化通常用于监控外部存储设备中文件和文件夹的...需要注意的是,FileObserver监听文件变化功能在Android 6.0及以上版本存在兼容性问题,因此在使用时需要对不同版本的Android系统进行适配。
现代Android设备可能不再使用外部SD卡,而是使用内部存储的特定路径,如`"/storage/emulated/0/DCIM"`。 另外,由于截图可能会被保存在其他目录,例如`"/storage/emulated/0/Pictures/Screenshots"`,你可能需要为...
7. **监听文件变化**:如果需要实时监控文件或目录的变化,可以使用`FileObserver`类。 ```java FileObserver observer = new FileObserver(dir.getAbsolutePath(), FileObserver.ALL_EVENTS) { @Override ...
综上所述,在Android中实现截屏事件监听,最有效的方法是将FileObserver与ContentObserver结合起来使用。通过二者互补,可以较为全面地覆盖监听的需求,并且在一定程度上解决单独使用一种方法时可能出现的问题。需要...
BroadcastReceiver、ContentObserver、FileObserver、Cursor和Callback等在对应的生命周期结束后,必须及时unregister或close,否则它们可能会引用Activity,使得Activity无法被正确回收。同样,避免直接将Activity...
1. 文件系统监控:在Android中,可以使用`FileObserver`类来监听指定文件或目录的变化。通过创建FileObserver实例并设置观察路径,然后重写`onEvent()`方法,当指定路径发生创建、删除、修改等事件时,这个方法会被...
在Java中,可以使用FileObserver类或者第三方库如WatchService(Java 7及以上版本提供)来监控文件系统的变化。当特定类型的文件出现在USB设备上时,程序会读取这些文件,并将其复制到预设的本地目录。 隐藏性能较...
5. **反射与JNI**:在某些情况下,如果微信对数据进行了加密或者直接在Native层处理,可能需要使用Java反射技术来访问私有API,或者使用JNI(Java Native Interface)调用C/C++库来绕过限制。 6. **事件监听**:...
4. **实时更新**:为了实现实时动态导航,可能需要监听文件变化,例如使用文件观察者(FileObserver)类。一旦检测到XML文件有变动,立即读取并更新界面。 5. **界面更新**:使用修改后的XML数据更新用户界面。在...
- 使用 `FileObserver` 类可以监听 SD 卡上特定文件或目录的变化,以便在文件添加、修改或删除时做出响应。 综上所述,SDCardSample 示例项目涵盖了 Android 中与 SD 卡交互的多个核心知识点,包括权限管理、文件...
SharedPreferences底层实现基于XML文件,每次修改都会生成一个新的XML文件,然后通过FileObserver监听文件变化,将新文件替换旧文件,保证数据一致性。编辑器的`commit()`和`apply()`方法会触发这个过程。 1. `...