WorkManager для периодического сканирования WiFi в фоновом режиме? - PullRequest
0 голосов
/ 26 октября 2019

У меня есть очень простое приложение, которое периодически проверяет результаты сканирования wifiManager и запускает функцию, если определенный SSID находится в диапазоне, и другую функцию, если он находится вне диапазона. Мне нужно, чтобы это работало как можно ближе к реальному времени.

До 9.0 я использовал приемник вещания Wi-Fi, и он работал прекрасно. Но с 9.0 все изменилось. Я отошел от приемника вещания и попробовал WorkManager, но, что бы я ни пытался, я не могу получить последовательные результаты.

Я понимаю, что интервал повторения не гарантирован, но сейчас я использую 20 минут, а иногда он будет срабатывать только 2-3 раза за целый день. В большинстве случаев все идет хорошо, но иногда это может продолжаться часами без срабатывания, что делает его бесполезным для моих целей.

Как вы, ребята, справляетесь с фоновым сканированием wifi в мире post 9.0?

Вот мой код для WorkManager:

    Constraints constraints =
            new Constraints.Builder()
                    .setRequiresCharging(false)
                    .setTriggerContentMaxDelay(15, TimeUnit.MINUTES)
                    .build();
    PeriodicWorkRequest connectWorker = new PeriodicWorkRequest.Builder(ConnectWorker.class, 20, TimeUnit.MINUTES)
            .setConstraints(constraints)
            .build();
    WorkManager.getInstance(getApplicationContext()).enqueueUniquePeriodicWork("Scan Wifi", ExistingPeriodicWorkPolicy.REPLACE, connectWorker);
...