`
xblia
  • 浏览: 82582 次
  • 性别: 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平台上,SD卡文件浏览器是一款实用的应用程序,它允许用户查看和管理存储在设备SD卡上的文件和文件夹。这个应用通常具有直观的界面,采用列表视图展示SD卡内容,便于用户浏览、选择、复制、移动或删除文件...

    java android 文件监听器

    在Android平台上,开发Java应用程序时,我们经常需要处理与文件系统相关的任务,其中之一就是实现文件监听器。这个功能允许我们实时监控一个特定的文件夹,一旦该文件夹中有新的文件出现,程序可以立即做出响应,...

    Android sd卡音频文件列表显示+歌曲播放

    在Android平台上,开发一个能列出SD卡上所有音乐文件并实现播放功能的应用是常见的需求。这个"Android sd卡音频文件列表显示+歌曲播放"的Demo就是为此目的设计的。它结合了文件系统操作、UI设计以及媒体播放技术,是...

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

    在Android开发中,有时我们需要实时监控SD卡上文件的变化,例如在文件同步、备份或文件管理系统中。Android系统为此提供了一个名为`FileObserver`的类,它基于Linux的`INotify`机制,允许我们监听指定路径下的文件或...

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

    在Android开发中,有时我们需要实时监控SD卡上文件的变化,比如文件的创建、删除、重命名或内容修改等。这通常可以通过使用`FileObserver`类来实现。`FileObserver`是Android提供的一种轻量级机制,用于监视指定目录...

    android中sd卡文件浏览列表

    在Android 6.0(API级别23)之前,应用程序默认拥有读写外部存储(如SD卡)的权限。但从Android 6.0开始,应用需要在运行时请求`WRITE_EXTERNAL_STORAGE`和`READ_EXTERNAL_STORAGE`权限。用户可以在应用的设置中给予...

    android 下载文件到SD卡

    在Android系统中,由于安全性和性能的考虑,应用程序通常不能直接访问内部存储空间,而是需要通过特定的方法来读写外部存储,也就是我们常说的SD卡(实际上现在多为内置存储)。本教程主要介绍如何在Android应用中...

    安卓SD卡文件管理更新信息相关-androidstudio开发获取手机文件系统.rar

    在Android应用开发中,对SD卡(外部存储)的文件管理是常见的需求,尤其是在处理大量数据、媒体文件或用户保存的文件时。Android Studio作为官方推荐的开发环境,提供了丰富的工具和API来帮助开发者实现这一功能。...

    android存储设备挂载流程

    Android 存储设备挂载流程详解 Android 存储设备挂载流程是一个复杂的过程,其中涉及到多个组件和模块的协作。在 Android 系统中,存储设备挂载流程可以分为手动挂载和自动挂载两个部分。本文将着重分析自动挂载...

    Android应用小实例--SD卡文件浏览器

    在Android平台上,开发一个SD卡文件浏览器是一个常见的实践任务,这可以帮助用户查看并管理设备上的文件。本实例将深入探讨如何构建这样一个应用,主要涉及以下几个关键知识点: 1. **权限管理**:首先,由于...

    android录制视频音频存储于sd卡并点击播放实例

    在Android平台上,录制视频音频并将其存储到SD卡上是一个常见的功能,这通常涉及到多媒体处理、文件操作以及用户界面交互等多个方面。以下是对这个实例的详细解析: 首先,要实现视频音频的录制,我们需要使用...

    把sd卡中的文件显示到ListView中

    在Android系统中,SD卡是用于扩展设备存储空间的一个重要组成部分,它允许用户存储大量数据,如音乐、图片、视频等。在这个特定的项目中,我们的目标是将SD卡中的MP3文件显示在一个ListView中。ListView是Android UI...

    Android FileObserver检测文件变化demo

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

    Android SD卡操作代码.zip

    在Android系统中,SD卡(Secure Digital Card)是设备存储扩展和数据交换的重要部分,尤其对于需要大量存储空间的应用程序而言。本压缩包"Android SD卡操作代码.zip"包含了一系列与Android应用程序如何读写SD卡相关...

    GetSDTree(简单SD卡文件浏览器) Android源码.rar

    Android系统基于Linux内核,因此它的文件系统也遵循类Unix的目录结构,如根目录(/)、数据目录(/data)以及外部存储(/storage/emulated/0),其中后者通常用于存储用户数据,包括SD卡内容。GetSDTree主要关注的...

    android 实时监听读取微信最新消息

    1. **Android系统权限**:首先,为了读取微信的消息,需要在AndroidManifest.xml文件中声明相应的权限,如读取存储卡的权限(READ_EXTERNAL_STORAGE)和获取应用运行时权限的管理(ACCESS_FINE_LOCATION)。...

    Android复制assets文件到SD卡

    Android复制assets文件到SD卡是一种常见的文件操作,目的是将应用程序的assets文件夹中的文件复制到SD卡上,以便于应用程序的数据存储和读取。本文将详细介绍Android复制assets文件到SD卡的方法,包括使用线程池和...

    AndroidGetSDTree(简单SD卡文件浏览器).zip

    在Android系统中,SD卡作为一个重要的外部存储空间,通常用于存储用户数据、应用缓存以及媒体文件等。本篇文章将深入探讨如何开发一个简单的SD卡文件浏览器——AndroidGetSDTree,通过分析源码,帮助读者理解和掌握...

    Android应用源码之判断双SD卡_CheckDoubleSDCard-IT计算机-毕业设计.zip

    在Android应用开发中,有时我们需要判断设备是否存在两个外部存储卡,即双SD卡。这个"Android应用源码之判断双SD卡_CheckDoubleSDCard"项目就是针对这一需求的一个实例。这个源码Demo可以帮助开发者理解如何在...

Global site tag (gtag.js) - Google Analytics