使用FileObserver对sdcard文件或文件夹监控

来源:互联网 发布:黑马程序员 java教程 编辑:程序博客网 时间:2024/05/21 03:25
http://orgcent.com/android-sdcard-fileobserver/

Android系统API提供了FileObserver抽象类(Linux的INotify机制)来监听系统/sdcard中的文件或文件夹,FileObserver类能对sdcard中的文件及文件夹的打开、创建、移动和删除操作进行监控。下面看看代码实现:

Java代码  收藏代码
  1. import android.app.Activity;  
  2. import android.os.Bundle;  
  3. import android.os.Environment;  
  4. import android.os.FileObserver;  
  5.   
  6. public class AndroidFileListenerActivity extends Activity {  
  7.     private FileObserver mFileObserver;  
  8.       
  9.     /** Called when the activity is first created. */  
  10.     @Override  
  11.     public void onCreate(Bundle savedInstanceState) {  
  12.         super.onCreate(savedInstanceState);  
  13.         setContentView(R.layout.main);  
  14.           
  15.         if(null == mFileObserver) {  
  16.             mFileObserver = new SDCardFileObserver(Environment.getExternalStorageDirectory().getPath());  
  17.             mFileObserver.startWatching(); //开始监听  
  18.         }  
  19.     }  
  20.   
  21.     public void onDestory() {  
  22.         if(null != mFileObserver) mFileObserver.stopWatching(); //停止监听  
  23.     }  
  24.       
  25.     static class SDCardFileObserver extends FileObserver {  
  26.         //mask:指定要监听的事件类型,默认为FileObserver.ALL_EVENTS  
  27.         public SDCardFileObserver(String path, int mask) {  
  28.             super(path, mask);  
  29.         }  
  30.   
  31.         public SDCardFileObserver(String path) {  
  32.             super(path);  
  33.         }  
  34.   
  35.         @Override  
  36.         public void onEvent(int event, String path) {  
  37.             final int action = event & FileObserver.ALL_EVENTS;  
  38.             switch (action) {  
  39.             case FileObserver.ACCESS:  
  40.                 System.out.println("event: 文件或目录被访问, path: " + path);  
  41.                 break;  
  42.                   
  43.             case FileObserver.DELETE:  
  44.                 System.out.println("event: 文件或目录被删除, path: " + path);  
  45.                 break;  
  46.                   
  47.             case FileObserver.OPEN:  
  48.                 System.out.println("event: 文件或目录被打开, path: " + path);  
  49.                 break;  
  50.                   
  51.             case FileObserver.MODIFY:  
  52.                 System.out.println("event: 文件或目录被修改, path: " + path);  
  53.                 break;  
  54.             }  
  55.         }  
  56.           
  57.     }  
  58. }  


注意事项:
1、防止FileObserver类的对象被垃圾回收,否则将不能收到文件及文件夹的监听事件了。
2、程序运行在Android模拟器中,使用Eclipse的DDMS中的File视图来对Android模拟器的sdcard中的文件及文件夹进行操作
0 0