Android监听SD卡文件变化

本文详细探讨了FileObserver的功能及其在监听目录文件变化时遇到的几个关键问题,包括监听范围限制、事件编码理解、目录删除后的重新生成策略以及如何通过异步线程实现更灵活的文件监控机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天再一次使用到FileObserver,上一次使用还是很久之前了。总结一下FileObserver里留的一些“坑”

1、FileObserver只能监听一个目录下的“一级”子文件,也就是说FileObserver不支持监测一个目录下嵌套子目录的文件;

2、关于FileObserver中的onEvent(int event, String path)函数。其中event在使用过程中发现总是一个很大的数,这与api中定义的1,2,4...512常量不相符。需要将event & FileObserver.ALL_EVENTS,才能得到sdk中定义的常量。究其原因,貌似event中的高位附带了一些信息;

3、经过试验发现如果监听的目录被删除了,FileObserver就没有作用了。即使后来再创建一个同样的目录。我要的效果是监听一个目录下的文件,如果这个文件被删除了就重新生成一个该文件,在调试中发现第一次删除整个目录后能重新生成,但是之后再删除就不起作用了(删除单个文件应该没有问题)。应该就是提到的这个原因。有一个解决方法就是通过handler方式,异步线程重新生成了文件后通知service,再重启对该目录的监测即可。

4、可以指定要针对文件的哪些操作动作进行监听:比如

static final int mask = (FileObserver.CREATE | 
    			FileObserver.DELETE | 
    			FileObserver.DELETE_SELF |
    			FileObserver.MODIFY |
    			FileObserver.MOVED_FROM |
    			FileObserver.MOVED_TO |
    			FileObserver.MOVE_SELF); 
    	
    	public PathFileObserver(String root){
    		super(root, mask);

    		... ...
    	}

转载于:https://my.oschina.net/kingguary/blog/143182

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值