Как мне запустить постоянный фоновый сервис в Android Oreo? - PullRequest
0 голосов
/ 13 июня 2018

Я постоянно сканирую устройства BLE.Теперь в Android Oreo ОС автоматически отключает службу, есть ли способ сканировать даже после того, как приложение было убрано?

Я исследовал
1) службу переднего плана с уведомлениями [плохой пользовательский опыт]
2.) периодический график работы [неэффективно]
3.) с использованием сервисов специальных возможностей [android подметает приложения, которые используют его, не помогая людям с ограниченными возможностями] или есть ли способ получить предварительное одобрение для этого?

Если есть что-то, чего мне не хватает, дайте мне знать

1 Ответ

0 голосов
/ 13 июня 2018

Для сканирования на полную мощность, Ваше резюме параметров является точным. Я написал сообщение в блоге об этом, которое взвешивает плюсы и минусы различных вариантов.

В библиотеке Android Beacon мы выбрали использование JobScheduler по умолчанию.Это может выполняться не чаще, чем каждые 15 минут в фоновом режиме.ИМО, сроки являются реальным недостатком этого подхода.Тот факт, что он немного тяжелее и менее эффективен, несущественен, поскольку запуск задания происходит только раз в 15 минут.

Библиотека также недавно добавила поддержку для дополнительной настройки службы переднего плана включить сканирование чаще.Для многих случаев использования постоянное уведомление приемлемо, хотя для других оно является реальным недостатком.

К сожалению, Android не имеет белого списка или специального процесса одобрения, чтобы обойти это ограничение. ВашеЕдинственным вариантом будет, если вы являетесь производителем устройства и можете настроить применение правил в своей собственной версии Android.

Одна из альтернатив, о которой вы не упомянули , которую использует Библиотека маяков Android, - это использоватьновый Android O API, который позволяет вам получать результаты сканирования с намерением BroadcastReceiver.Это хорошо работает с фильтром сканирования, чтобы разбудить ваше приложение, если обнаружен пакет BLE определенного интереса.Но как только один обнаружен.Ваш процесс не запускается во время этого сканирования, но он может затем запустить фоновый сервис для обычного 10-минутного ограничения на Android 8 после того, как такое обнаружение имеет место.В приведенном ниже примере результаты получены в MyBroadcastReceiver.

 Intent intent = new Intent(mContext, MyBroadcastReceiver.class);
 PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

 int result = bluetoothAdapter.getBluetoothLeScanner().startScan(filters, settings, pendingIntent);

. Используя комбинацию описанных выше методов, большинство приложений для сканирования по Bluetooth все еще могут хорошо работать на Android 8+.

...