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;
/**
*
* @author : hanshizhe
* e-mail : [email protected]
* time : 2020/6/28 11:54
* desc : 文件监听修改器
*
*/
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;
/**
*
* @author : hanshizhe
* e-mail : [email protected]
* time : 2020/6/28 11:25
* desc :
*
*/
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)