出于安全上的需要,我们经常需要监听sd卡或者其他路径上的文件夹创建,那么,如何实现呢,由于android sdk提供了丰富易用的接口,所以问题很简单。
android.os下的FileObserver类是一个用于监听文件访问、创建、修改、删除、移动等操作的监听器,基于linux的inotify。 FileObserver 是个抽象类,必须继承它才能使用。每个FileObserver对象监听一个单独的文件或者文件夹,如果监视的是一个文件夹,那么文件夹下所有的文件和级联子目录的改变都会触发监听的事件。
所能监听的事件类型如下:
ACCESS,即文件被访问
MODIFY,文件被 修改
ATTRIB,文件属性被修改,如 chmod、chown、touch 等
CLOSE_WRITE,可写文件被 close
CLOSE_NOWRITE,不可写文件被 close
OPEN,文件被 open
MOVED_FROM,文件被移走,如 mv
MOVED_TO,文件被移来,如 mv、cp
CREATE,创建新文件
DELETE,文件被删除,如 rm
DELETE_SELF,自删除,即一个可执行文件在执行时删除自己
MOVE_SELF,自移动,即一个可执行文件在执行时移动自己
CLOSE,文件被关闭,等同于(IN_CLOSE_WRITE | IN_CLOSE_NOWRITE)
ALL_EVENTS,包括上面的所有事件
这些都是FileObserver的静态共有属性。
下面举个例子说明一下其用法。
比如,我要监听sd卡的目录创建事件,新建一个类SDCardListener继承FileObserver:
- import android.os.FileObserver;
- import android.util.Log;
-
-
-
-
-
-
- public class SDCardListener extends FileObserver {
-
- public SDCardListener(String path) {
-
-
-
-
- super(path);
- }
-
- @Override
- public void onEvent(int event, String path) {
- switch(event) {
- case FileObserver.ALL_EVENTS:
- Log.d("all", "path:"+ path);
- break;
- case FileObserver.CREATE:
- Log.d("Create", "path:"+ path);
- break;
- }
- }
- }
onEvent是回调,系统监听到事件后会触发此事件,参数event就是上面所说的事件类型,根据类型,我们可以做相应的处理,参数path就是触发事件的目录。
然后使用它:
- SDCardListener listener = new SDCardListener("/sdcard");
-
- listener.startWatching();
-
-
-
-
- listener.stopWatching();
如果要在onEvent中做较多操作,最好用线程去做 ,以免因为阻塞接收不到后面的事件。
最后补充一点,比较重要 :
FileObserver对象必须保持一个引用,确保不被垃圾收集器回收掉,否则就不会触发事件了。
分享到:
相关推荐
`FileObserver`是一个用于监视文件或目录变化的类,它可以监控创建、删除、修改、移动等事件。 ```java public class MediaObserver extends FileObserver { public MediaObserver(String path, int mask) { ...
Android系统为此提供了一个名为`FileObserver`的类,它基于Linux的`INotify`机制,允许我们监听指定路径下的文件或文件夹的各种事件,如创建、删除、移动和打开等。 首先,我们来看如何创建一个`FileObserver`实例...
1. Android文件系统:Android采用Linux内核,因此其文件系统与传统的Linux文件系统类似,包括根目录、挂载点、文件和目录等。 2. Android存储空间:Android设备通常有两种存储方式,内部存储(Internal Storage)和...
文件管理器需要提供创建、删除、重命名文件和目录的功能。这些操作可以通过File类提供的mkdirs(), delete(), renameTo()等方法实现。同时,要注意处理可能出现的异常,如文件不存在、无权限等。 4. **UI设计与布局*...
开发者可能创建了一个BroadcastReceiver或者使用startActivityForResult()来监听U盘插入和拔出事件。 3. **Permission管理**:由于Android 6.0及以上版本引入了运行时权限,开发者需要在运行时请求读写外部存储和...
这个项目名为"FileManagerExample",它包含了创建、浏览、编辑、复制、移动、删除文件和目录等一系列常见的文件管理功能。 首先,Android的文件管理主要涉及到以下几个核心知识点: 1. **文件操作API**:Android...
首先,我们要明白Android文件浏览器的基本功能:列出指定目录下的文件和子目录,支持用户选择、查看、复制、移动和删除文件。这个简单的文件浏览器实现了这些基础功能,对于初学者来说,这是一个很好的学习起点。 ...
- `java.io.File`:Java中的核心类,用于处理文件和目录,包括创建、删除、重命名、获取属性等操作。 - `ContentResolver`:Android特有的API,用于与内容提供者交互,访问文件系统或媒体库。 - `Intent`:用于...
4. 文件操作逻辑:包括创建、删除、移动、复制等文件操作。这些功能通常由`FileOperation`类或者相关服务实现,涉及到了Android的文件I/O操作和Intent机制。 5. 搜索功能:文件管理器的搜索功能涉及到全文搜索或者...
- 实现文件的创建、删除、重命名、复制、移动等操作,涉及`File`类的各种方法。 - 对于大文件,可能需要使用异步任务(`AsyncTask`)避免阻塞UI线程。 6. **权限管理**: - Android 6.0及以上版本需要动态请求`...
3. **文件I/O操作**:在Android中处理文件,包括读取、写入、创建和删除文件,是文件共享程序的基础。 4. **蓝牙和WiFi的区别**:虽然两者都能进行设备间通信,但WiFi Direct在速度和文件大小上有优势,适合大文件...
在Android平台上进行录音操作是移动应用开发中常见的功能,它涉及到多媒体处理、文件操作以及用户交互等多个方面。本文将深入探讨如何在Android中实现录音、获取录音文件以及控制录音时间,同时也会提及与动画和文件...
在Android平台上,文件管理器是用户与设备存储交互的重要工具,它允许用户浏览、操作、创建、删除和管理各种类型的文件。本篇文章将深入探讨如何使用Android UI组件ListView来实现一个基本的文件管理器,以及如何...
开发者会接触到`File`类用于创建、读取、写入和删除文件,以及`InputStream`和`OutputStream`用于流式数据操作。 2. **SQLite数据库**:在管理文件时,可能会用到SQLite数据库来存储文件元数据,例如文件路径、大小...
1. 创建/删除/重命名:使用`File`类的方法实现对文件和目录的创建、删除和重命名操作。 2. 复制/移动:涉及`ParcelFileDescriptor`和`FileChannel`,用于在文件系统间传输数据。 3. 解压缩/压缩:可以集成第三方库如...
通过这个项目,开发者可以学习到Android应用开发的基础知识,包括UI设计、文件操作、事件处理、权限管理和项目构建等方面。同时,对于希望深入了解Android系统和文件管理功能的人来说,这是一个很好的实践案例。
在Android平台上,SD卡文件浏览器是一款实用的应用程序,它允许用户查看和管理存储在设备SD卡上的文件和文件夹。这个应用通常具有直观的界面,采用列表视图展示SD卡内容,便于用户浏览、选择、复制、移动或删除文件...
"SQLite数据库"深入介绍了如何在Android中操作数据库,包括创建表、插入、查询、更新和删除数据的SQL语句,以及如何在应用中使用SQLiteOpenHelper类。 最后,"Android高级编程"可能涵盖了更复杂的话题,如多线程...