Android监听文件和目录动态

  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;

  /**

  * sd卡上的目录创建监听器

  * @author way

  *

  */

  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就是触发事件的目录。

  然后使用它:

  SDCardListener listener = new SDCardListener("/sdcard");

  //开始监听

  listener.startWatching();

  /*

  * 在这里做一些操作,比如创建目录什么的

  */

  //最后停止监听

  listener.stopWatching();

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

  重要 :

  FileObserver对象必须保持一个引用,确保不被垃圾收集器回收掉,否则就不会触发事件了

时间: 2024-11-16 11:30:26

Android监听文件和目录动态的相关文章

Android监听电池状态实例代码_Android

如果要监听电池的状态改变,需要动态注册:android.intent.action.BATTERY_CHANGED,收到Action后可以根据对应的Key获取你需要的信息,更详细信息可以参考以下例子中的BatteryChangedReceiver类 具体代码如下所示: package com.example.charginganimation; import android.app.Activity; import android.content.BroadcastReceiver; impor

Android 监听网络状态方法详解

Android 监听网络状态方法详解 一.加入网络权限 获取网络信息需要在AndroidManifest.xml文件中加入相应的权限. <uses-permission Android:name="android.permission.ACCESS_NETWORK_STATE" /> 二.判断手机网络的几个方案 1)判断是否有网络连接 public boolean isMobileConnected(Context context) { if (context != nul

Android监听获取应用的安装和卸载事件

Android 应用程序的安装和卸载事件,是由系统进行监听并全局广播的,支 持1.5(android 3)以上 因此,如果想要监听获取应用的安装和卸载事 件,只需要自定义一个BroadcastReceiver,来对系统广播进行监听和处理 BroadcastReceiver 是系统全局广播监听类, 其主要方法是onReceive (),自定义的广播类继承于它并实现自己的onReceive()处理逻辑 BroadcastReceiver 使用前,需要进行注册监听(xml和代码两种方式) ,不使用时需

Android 监听wifi广播的两种方式

 1.XML中声明 <receiver android:name=".NetworkConnectChangedReceiver" > <intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> <action android:name="android.net.wifi.WIFI_STATE_CHANGED"

新手学android,监听两个按钮的问题,出现错误

问题描述 新手学android,监听两个按钮的问题,出现错误 package com.example.xingpengfei.guessnumber; import android.content.DialogInterface; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; imp

android 监听返回键怎么从activity 跳转到tabhost主页且选项卡不消失?

问题描述 android 监听返回键怎么从activity 跳转到tabhost主页且选项卡不消失? 我用activity 和tabhost配套使用,当监听返回键时跳转到tabhost主页,发现选项卡消失,不只是为什么?求各位大神解答?谢谢! 解决方案 那要看你点击返回键的函数里面是怎么跳转的

Android监听Home键实例详解_Android

本文实例讲述了Android监听Home键的方法.分享给大家供大家参考,具体如下: 将到android中Home键的监听,很多人第一反应时重写相应Activity的onKeyDown()方法,监听当按下的键的keyCode为KEYCODE_HOME时,进行自己的相应的处理.如: @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_HOME) { stop

Android监听来电和去电的实现方法_Android

本文实例讲述了Android监听来电和去电的实现方法.分享给大家供大家参考,具体如下: 要监听android打电话和接电话,只需下面2步骤 第一步,写一个Receiver继承自BroadcastReceiver import android.app.Service; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import andr

Android监听手机电话状态与发送邮件通知来电号码的方法(基于PhoneStateListene实现)_Android

本文实例讲述了Android监听手机电话状态与发送邮件通知来电号码的方法.分享给大家供大家参考,具体如下: 在android中可以用PhoneStateListener来聆听手机电话状态(比如待机.通话中.响铃等).本例是通过它来监听手机电话状态,当手机来电时,通过邮件将来电号码发送到用户邮箱的例子.具体程序如下: import android.app.Activity; import android.content.Intent; import android.os.Bundle; impor