`
xblia
  • 浏览: 79866 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

android SD卡文件监听

 
阅读更多
android 监听文件和目录的创建删除移动等事件 博客分类: Android
AndroidOSLinuxAccessBlog.
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:

Java代码  
1.import android.os.FileObserver;   
2.import android.util.Log;    
3.  
4./**  
5. * sd卡上的目录创建监听器  
6. * @author chroya  
7. *  
8. */  
9.public class SDCardListener extends FileObserver {    
10.  
11.    public SDCardListener(String path) {    
12.        /*  
13.         * 这种构造方法是默认监听所有事件的,如果使用super(String,int)这种构造方法,  
14.         * 则int参数是要监听的事件类型.  
15.         */  
16.        super(path);    
17.    }   
18.  
19.    @Override   
20.    public void onEvent(int event, String path) {           
21.        switch(event) {    
22.        case FileObserver.ALL_EVENTS:    
23.            Log.d("all", "path:"+ path);    
24.            break;    
25.        case FileObserver.CREATE:    
26.            Log.d("Create", "path:"+ path);    
27.            break;    
28.        }   
29.    }   
30.}  
Java代码  
1.import android.os.FileObserver;   
2.import android.util.Log;   
3.  
4./**  
5. * sd卡上的目录创建监听器  
6. * @author chroya  
7. *  
8. */  
9.public class SDCardListener extends FileObserver {   
10.  
11.    public SDCardListener(String path) {   
12.        /*  
13.         * 这种构造方法是默认监听所有事件的,如果使用super(String,int)这种构造方法,  
14.         * 则int参数是要监听的事件类型.  
15.         */  
16.        super(path);   
17.    }   
18.  
19.    @Override  
20.    public void onEvent(int event, String path) {          
21.        switch(event) {   
22.        case FileObserver.ALL_EVENTS:   
23.            Log.d("all", "path:"+ path);   
24.            break;   
25.        case FileObserver.CREATE:   
26.            Log.d("Create", "path:"+ path);   
27.            break;   
28.        }   
29.    }   
30.}  
import android.os.FileObserver;
import android.util.Log;

/**
 * sd卡上的目录创建监听器
 * @author chroya
 *
 */
public class SDCardListener extends FileObserver {

	public SDCardListener(String path) {
		/*
		 * 这种构造方法是默认监听所有事件的,如果使用super(String,int)这种构造方法,
		 * 则int参数是要监听的事件类型.
		 */
		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就是触发事件的目录。 

      然后使用它: 

Java代码  
1.SDCardListener listener = new SDCardListener("/sdcard");   
2.//开始监听    
3.listener.startWatching();   
4./*  
5.* 在这里做一些操作,比如创建目录什么的  
6.*/  
7.//最后停止监听    
8.listener.stopWatching();  
Java代码  
1.SDCardListener listener = new SDCardListener("/sdcard");   
2.//开始监听   
3.listener.startWatching();   
4./*  
5.* 在这里做一些操作,比如创建目录什么的  
6.*/  
7.//最后停止监听   
8.listener.stopWatching();  
SDCardListener listener = new SDCardListener("/sdcard");
//开始监听
listener.startWatching();
/*
* 在这里做一些操作,比如创建目录什么的
*/
//最后停止监听
listener.stopWatching(); 

      如果要在onEvent中做较多操作,最好用线程去做 ,以免因为阻塞接收不到后面的事件。

      最后补充一点,比较重要 :
      FileObserver对象必须保持一个引用,确保不被垃圾收集器回收掉,否则就不会触发事件了。

 

分享到:
评论

相关推荐

    android 监听SD卡文件变化的实现代码

    Android系统API提供了FileObserver抽象类(Linux的INotify机制)来监听系统/sdcard中的文件或文件夹,FileObserver类... * SD卡中的目录创建监听器。 * * @author mayingcai */ public class SDCardListener extend

    使用FileObserver监听SD卡下文件变动的小栗子~

    根据"如数家珍"app的公开源码修改的小栗子,能简单实现sd卡的文件修改状态监听,亲测可用,初学者可以学习一下~ 共同进步~

    Android FileObserver检测文件变化demo

    Android FileObserver 检测文件变化demo,Android FileObserver 检测文件其实也是基于linux的inotify实现的,是从linux内核2.6.13开始加进来的,不过FileObserver检测的文件还是有局限的,似乎只能检测到SD卡的文件...

    Android App监听自身卸载反馈统计

    实现fork()子进程创建监听文件初始化 inotify 实例注册监听事件调用 read 函数开始监听卸载反馈统计场景正常卸载断网卸载清除数据(5.0 以上不支持)kill 进程(5.0 以上不支持)插拔 USB 线覆盖安装内部存储移到 SD...

    Android开发应用实战详解源代码

    4.20 加载手机存储卡中的文件 4.21 小结 第5章 交互式服务 5.1 textview的花样 5.2 拨打电话程序 5.3 短信发送程序 5.4 e-mail发送程序 5.5 实现手机震动效果 5.6 图文提醒效果 5.7 状态栏提醒 5.8 检索通讯录 5.8.1...

    Android应用源码安卓源码(172个合集).zip

    GetSDTree(简单SD卡文件浏览器) hotel宾馆系统.zip ImageView 图片循环跑马灯的效果.rar ipcamera-for-android 手机变成IP Camera.rar jamendo-开源在线音乐.rar jchat4android手机聊天程序.rar LoginXml.rar ...

    Android应用中实现选择本地文件与目录的实例分享

    今天给大家分享下文件选择器的作用 , 具体就是获取用户在在SD卡选中的文件/文件夹路径 ,类似于C#中OpenFileDialog控件(对C#的一站式开发还是念念不忘)。功能实现起来比较简单,主要是帮助大家节省开发时间。 网上...

    疯狂Android讲义源码

     8.2.2 读写SD卡上的文件 314  8.3 SQLite数据库 321  8.3.1 简介SQLiteDatabase 321  8.3.2 创建数据库和表 323  8.3.3 使用SQL语句操作SQLite  数据库 323  8.3.4 使用sqlite3工具 325  8.3.5 使用特定...

    通用Android工具库Common4Android.zip

    SD卡信息管理工具类。 SharedPreferencesUtil.java SharedPreferences工具类。 StringUtil.java 字符串处理工具类。 ...

    精通ANDROID 3(中文版)1/2

    19.3.7 为整个SD卡触发MediaScanner  19.3.8 参考资料  19.4 小结  第20章 使用OpenGL进行3D图形编程  20.1 了解OpenGL的历史和背景  20.1.1 OpenGL ES  20.1.2 OpenGL ES与Java ME  20.1.3 M3G:另...

    Android ImageLoader 库源代码

    支持图片的内存缓存,文件系统缓存或者SD卡缓存 支持图片下载过程的监听 根据控件(ImageView)的大小对Bitmap进行裁剪,减少Bitmap占用过多的内存 较好的控制图片的加载过程,例如暂停图片加载,重新开始加载图片,...

    黑马程序员 安卓学院 万元哥项目经理 分享220个代码实例

    |--android 获取sd卡状态 |--android 设置apn |--android 调节屏幕亮度 |--android 资源uri |--android 还原短信 |--android 重启 |--android中anim文件特效 |--app信息menifest获取(如版本号) |--AsyncQueryHandler...

    Android实例代码

    读写SD卡文件; 8.3、SQLite数据库:SQL语句; SQLiteDatabase; SQLiteOpenHelper; sqlite3 tools; 8.4、手势(Gesture): 8.5、自动朗读(TTS): 8.6、网络存储: 第9章、使用ContentProvider实现数据共享 9.1...

    疯狂Android讲义.part2

    8.2.2 读写SD卡上的文件 314 8.3 SQLite数据库 321 8.3.1 简介SQLiteDatabase 321 8.3.2 创建数据库和表 323 8.3.3 使用SQL语句操作SQLite 数据库 323 8.3.4 使用sqlite3工具 325 8.3.5 使用特定方法操作SQLite ...

    疯狂Android讲义.part1

    8.2.2 读写SD卡上的文件 314 8.3 SQLite数据库 321 8.3.1 简介SQLiteDatabase 321 8.3.2 创建数据库和表 323 8.3.3 使用SQL语句操作SQLite 数据库 323 8.3.4 使用sqlite3工具 325 8.3.5 使用特定方法操作SQLite ...

    Android知识点及重要代码合集 word文档

    2.1 AndroidStudio中R文件的位置 7 2.2 View继承结构图 7 2.3 LinearLayout布局基本属性 7 2.4 用户名密码 登陆重置常用代码 9 2.5 ARBG颜色 10 2.6 命名空间 10 2.7 RelativeLayout相对布局属性 10 2.8 相对布局...

    疯狂Android讲义(第2版)源代码 第6章~第9章

    读写SD卡文件; 8.3、SQLite数据库:SQL语句; SQLiteDatabase; SQLiteOpenHelper; sqlite3 tools; 8.4、手势(Gesture): 8.5、自动朗读(TTS): 8.6、网络存储: 第9章、使用ContentProvider实现数据共享 9.1...

    Android开发资料合集--续

    获取SD卡上的文件存储路径 50 将图片保存到SD卡上 50 26、TextView垂直滚动 51 27、判断某服务是否开启 56 28、判断SD卡是否已挂载 56 29、文件操作类 57 1、获得文件或目录的大小 57 2、递归删除目录或文件 57 30、...

Global site tag (gtag.js) - Google Analytics