FileObserver递归监听目录(解决无法监听目录的创建、删除问题)

本文针对Android中FileObserver无法递归监听目录的创建、删除问题,提出了解决方案。通过监听CREATE事件,动态注册新创建的目录,避免冗余监听,并通过ArrayMap存储已监听目录,优化了监听管理。同时强调了原创和引用的重要性。
摘要由CSDN通过智能技术生成

FileObserver递归监听目录(解决无法监听目录的创建、删除问题)

主要内容

为了解决Android媒体数据库更新不及时的问题,我想打算通过FileObserver监听SD卡根目录下所有文件的变化,然后根据文件的变化对Android媒体数据库进行更新。而FileObserver无法做到递归监听。通过参考FileObserver 研究及其递归监听初步实现这篇博客,在其基础上,主要解决了几个问题:

  1. 无法监听目录的创建、删除
  2. 开启监听之后,新创建的目录无法监听
  3. 冗余注册监听的问题

冗余注册监听我是通过用ArrayMap键值对来解决的,以监听目录的绝对路径作为key,以监听器作为value。(也可以使用ArraySet集合实现)而开启监听之后,新创建的目录无法监听的问题则是通过监听FileObserver.CREATE事件,当创建新目录且该目录还没注册监听时,就注册并启动监听。
接下来,干货来了,代码如下:

public class RecursiveFileObserver extends FileObserver
{
   
    Map<String, SingleFileObserver> mObservers;
    String mPath;
    int mMask;
    public RecursiveFileObserver(String path)
    {
        this(path, ALL_EVENTS);
    }

    public RecursiveFileObserver(String path, int mask)
    {
        super(path, mask);
        mPath = path;
        mMask = mask;
    }

    @Override public void startWatching()
    {
        if (mObservers != null)
            return ;
        mObservers = new ArrayMap<>();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知用改创

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值