Я хочу отслеживать некоторые папки с приложением и получать уведомления, когда в них вносятся изменения. Чтобы сделать это возможным, служба в фоновом режиме, на которой выполняется FileObserver.
Вот соответствующие фрагменты кода:
Служба (работает как служба переднего плана):
public class MemoService extends Service {
private List<RecursiveFileObserver> observerList = new ArrayList<>();
@Override
public void onCreate()
{
//createNotification for service
//[...]
//start observer
for(int n = 0; n < filesToMonitor.size(); n++)
{
Log.d(this.getClass().getName(), "create new observer for: " + filesToMonitor.get(n));
RecursiveFileObserver observer = new RecursiveFileObserver(filesToMonitor.get(n), new RecursiveFileObserver.EventListener() {
@Override
public void onEvent(int event, File file) {
Notification not = new NotificationCompat.Builder(MemoService.this, CHANNEL_ID + "_")
.setContentTitle("Observe Event")
.setContentText("file: " + file.getName() + "\nevent:" + event)
.setSmallIcon(R.drawable.app_icon)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.app_icon))
.setShowWhen(false)
.build();
NotificationManager mgr = (NotificationManager)MemoService.this.getSystemService(Context.NOTIFICATION_SERVICE);
mgr.notify(2, not);
}
});
observer.startWatching();
observerList.add(observer);
}
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
super.onStartCommand(intent, flags, startId);
\\[...]
return START_STICKY;
}
@Override
public void onDestroy()
{
super.onDestroy();
for(int n = 0; n < observerList.size(); n++)
{
Log.d(this.getClass().getName(), "stop watching at " + observerList.get(n));
observerList.get(n).stopWatching();
}
}
}
FileObserver:
Для FileObserver Я использую RecursiveFileObserver из https://gist.github.com/gitanuj/888ef7592be1d3f617f6
Почему не генерируются уведомления?
В Logcat также ничего не выводится.
Сервис все время активен. Поток FileObserver также не был прерван.
Спасибо за помощь :)