美文网首页
2020-06-29

2020-06-29

作者: zhezi521 | 来源:发表于2020-06-29 10:33 被阅读0次

    2020年6月29日

      项目需求:需要监听文件发生的改动(.txt)文件,当文件发生变化时读取并进行相应的处理

      方案设计:

        (1)开启线程,定时读取该文件,检测是否该文件发生变化。

        (2)寻找可以监听文件变化的系统API,找到FileObserver这个系统API

    使用方式

      ```js

    package com.dudu.mylibrary;

    import android.content.Context;

    import android.os.FileObserver;

    import android.support.annotation.Nullable;

    import android.util.Log;

    /**

    * <pre>

    *    @author : hanshizhe

    *    e-mail  : hanshizhe@foxmail.com

    *    time    : 2020/6/28 11:54

    *    desc    : 文件监听修改器

    * </pre>

    */

    public class FileModifyObserver extends FileObserver {

        private Context mContext;

        private OnLookListener mListener;

        public FileModifyObserver(Context context,String path,OnLookListener listener) {

            super(path,FileObserver.ALL_EVENTS);

            this.mContext = context;

            this.mListener = listener;

        }

        @Override

        public void onEvent(int event, @Nullable String path) {

            Log.d("MakeMyJar_APP",event+"监控文件");

            if(event == FileObserver.MODIFY){

                mListener.onSuccess(9999);

            }

        }

    }

    ``` 

      调用方式:

    ```js

    package com.dudu.mylibrary;

    import android.content.Context;

    /**

    * <pre>

    *    @author : hanshizhe

    *    e-mail  : hanshizhe@foxmail.com

    *    time    : 2020/6/28 11:25

    *    desc    :

    * </pre>

    */

    public class LookHelper {

        //重点--生成全局变量,防止系统回收

        public static FileModifyObserver fileModifyObserver;

        public static void doLook(LookConfig config,OnLookListener listener){

            //获取相应的参数

            Context context  = config.getContext();

            String  filePath = config.getFilePath();

            //开始文件监听工作

            fileModifyObserver = new FileModifyObserver(context,filePath,listener);

            fileModifyObserver.startWatching();

        }

    }

    ``` 

      问题:1. 多次测验过程中,出现文件变化监控不到的情况,生成全局变量即可

      参考:

    [Android FileObserver 监听文件变化](https://www.jianshu.com/p/a509ad4311c0)

    [Android中的FileObserver监听无效](https://www.cnblogs.com/chorm590/p/12370952.html)

    相关文章

      网友评论

          本文标题:2020-06-29

          本文链接:https://www.haomeiwen.com/subject/ltqofktx.html