比如,我要监听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. }
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();
SDCardListener listener = new SDCardListener("/sdcard");
//开始监听
listener.startWatching();
/*
* 在这里做一些操作,比如创建目录什么的
*/
//最后停止监听
listener.stopWatching();
如果要在onEvent中做较多操作,最好用线程去做 ,以免因为阻塞接收不到后面的事件。
最后补充一点,比较重要 :
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. }
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();
SDCardListener listener = new SDCardListener("/sdcard");
//开始监听
listener.startWatching();
/*
* 在这里做一些操作,比如创建目录什么的
*/
//最后停止监听
listener.stopWatching();
如果要在onEvent中做较多操作,最好用线程去做 ,以免因为阻塞接收不到后面的事件。
最后补充一点,比较重要 :
FileObserver对象必须保持一个引用,确保不被垃圾收集器回收掉,否则就不会触发事件了。