Android FileObserver не видна реакция на событие - PullRequest
0 голосов
/ 16 марта 2020


Я хочу отслеживать некоторые папки с приложением и получать уведомления, когда в них вносятся изменения. Чтобы сделать это возможным, служба в фоновом режиме, на которой выполняется 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 также не был прерван.
Спасибо за помощь :)

...