Android 监听文件夹

在一次Androidpc端的通讯过程中,我们放弃了adb forward来实现socket通讯。而是使用adb push文件,我监听文件夹... 都学习一下很有必要

本篇简单Android监听文件夹的方式FileObserver

FileObserver简介

Android.os包下的FileObserver类是一个用于监听文件访问、创建、修改、删除、移动等操作的监听器,基于LinuxINotify

FileObserver是个抽象类,必须继承它才能使用。每个FileObserver对象监听一个单独的文件或者文件夹,如果监视的是一个文件夹,那么文件夹下所有的文件和级联子目录的改变都会触发监听的事件。

FileObserver使用


package com.example.chenjy.chenjy;

import android.os.FileObserver;

import utils.LogUtil;

/**
 * Created by chenjy on 2017/5/2.
 */

public class FileListener extends FileObserver {

    private EventCallback callback;

    public FileListener(String path) {
        super(path);
    }

    public void setEventCallback(EventCallback callback){
        this.callback = callback;
    }

    @Override
    public void onEvent(int event, String path) {
        LogUtil.i("FileListener", "path="+path);
        switch (event){
            // 文件被访问
            case FileObserver.ACCESS:
                LogUtil.i("FileListener", "ACCESS");
                break;
            // 文件被修改
            case FileObserver.MODIFY:
                LogUtil.i("FileListener", "MODIFY");
                break;
            // 文件属性被修改
            case FileObserver.ATTRIB:
                LogUtil.i("FileListener", "ATTRIB");
                break;
            // 可写文件被close
            case FileObserver.CLOSE_WRITE:
                LogUtil.i("FileListener", "CLOSE_WRITE");
                if(callback != null){
                    callback.onEvent(path);
                }
                break;
            // 不可写文件被close
            case FileObserver.CLOSE_NOWRITE:
                LogUtil.i("FileListener", "CLOSE_NOWRITE");
                break;
            // 文件被打开
            case FileObserver.OPEN:
                LogUtil.i("FileListener", "OPEN");
                break;
            // 文件被移走
            case FileObserver.MOVED_FROM:
                LogUtil.i("FileListener", "MOVED_FROM");
                break;
            // 文件被移进来
            case FileObserver.MOVED_TO:
                LogUtil.i("FileListener", "MOVED_TO");
                break;
            // 文件被删除
            case FileObserver.DELETE:
                LogUtil.i("FileListener", "DELETE");
                break;
            // 创建新文件
            case FileObserver.CREATE:
                LogUtil.i("FileListener", "CREATE");
                break;
            // 自删除
            case FileObserver.DELETE_SELF:
                LogUtil.i("FileListener", "DELETE_SELF");
                break;
            // 自移动
            case FileObserver.MOVE_SELF:
                LogUtil.i("FileListener", "MOVE_SELF");
                break;
        }
    }

    public interface EventCallback{
        void onEvent(String path);
    }
}


FileObserver调用


package com.example.chenjy.chenjy;

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;

public class MainActivity extends Activity {

    public static final String FILE_PATH = Environment.getExternalStorageDirectory().getAbsolutePath()+"/Pictures";


    private FileListener fileListener = new FileListener(FILE_PATH);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        fileListener.startWatching();

    }

}


运行app

outPut

然后通过adb pushandroid 设备push图片。

outPut

outPut

outPut

posted @ 2018-09-17 14:55  可爱的黑精灵  阅读(672)  评论(0编辑  收藏  举报