zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    wampserver2.2e-php5.3.13 版本 增加 php7 支持
    23种设计模式[3]:抽象工厂模式
    23种设计模式[2]:工厂方法模式
    23种设计模式[1]:单例模式
    [转]设计模式六大原则[6]:开闭原则
    [转]设计模式六大原则[5]:迪米特法则
    [转]设计模式六大原则[4]:接口隔离原则
    [转]设计模式六大原则[3]:依赖倒置原则
    [转]设计模式六大原则[2]:里氏替换原则
    [转]设计模式六大原则[1]:单一职责原则
  • 原文地址:https://www.cnblogs.com/chenjy1225/p/9662151.html
Copyright © 2011-2022 走看看