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

  • 相关阅读:
    电子邮件的工作原理
    常用邮箱服务器地址端口
    wpf \silverlight 保存控件为图片
    GIS理论(墨卡托投影、地理坐标系、地面分辨率、地图比例尺、Bing Maps Tile System)【转载】
    Visifire图表控件官网地址
    Ado方式导入excel混用数据类型引起数据缺失问题解决方法
    c#日期时间的操作
    获得excel的sheet名字
    正则表达式验证可发短信的号码,如手机号和小灵通号码(106+区号+号码)
    验证多行文本框输入长度的正则表达式
  • 原文地址:https://www.cnblogs.com/chenjy1225/p/9662151.html
Copyright © 2011-2022 走看看