我有一个Android应用程序,我想监视一个文件夹。我做了一个服务(我想不停地监视文件夹,即使用户杀了应用程序),我把文件夹的路径放在Intent的附加内容中。在服务中,我有一个FileObserver,它应该监视我的文件夹并在文件夹内创建文件时触发事件。问题是事件永远不会被触发。 难道我做错了什么?谢谢!
@Override
public int onStartCommand(Intent intent, int flags, int startId){
String mainFolder = intent.getStringExtra("mainFolder");
Toast.makeText(getApplicationContext(), "Service start! Main folder is: " + mainFolder, Toast.LENGTH_LONG).show();
FileObserver observer = new FileObserver(mainFolder) {
@Override
public void onEvent(int event, String path) {
if (path == null) {
return;
}
if (FileObserver.CREATE == event) {
Toast.makeText(getApplicationContext(), "This file was creted: " + path, Toast.LENGTH_LONG).show();
}
}
};
observer.startWatching();
return START_REDELIVER_INTENT;
}
答案 0 :(得分:0)
引用the documentation for FileObserver
:
警告:如果FileObserver被垃圾收集,它将停止发送事件。为确保您继续接收事件,您必须保留对其他实时对象的FileObserver实例的引用。
FileObserver
实例只要onStartCommand()
返回就有资格进行垃圾回收,因为您没有将其保存在字段中,而是保存在本地变量中。
另外,请记住,服务不会永远运行。