Отключить BroadcastReceiver для Oreo? - PullRequest
0 голосов
/ 15 мая 2018

У меня зарегистрирован получатель в файле манифеста моего приложения с действием BOOT_COMPLETED.В моем приложении есть сторонняя библиотека, и когда она получает действие BOOT_COMPLETED, она запускает службу.Поскольку в Android Oreo существуют ограничения на фоновое выполнение, он падает.

Теперь я хочу отключить этот приемник только для устройств Android O.Есть ли способ сделать это?Может быть, так же, как @TargetApi, но в Android Manifest?

Я забыл написать, что не могу изменить класс библиотеки, это внешний файл jar.

1 Ответ

0 голосов
/ 15 мая 2018

Поскольку код библиотеки не находится под вашим контролем, любой подход не будет работать.Вы должны попросить поставщика библиотеки соответствовать последней версии ОС.

Вы можете попробовать выполнить следующие действия:

  • Зарегистрируйте BOOT_COMPLETED в своем приложении с высоким приоритетом следующим образом:

    <action android:name="android.intent.action.BOOT_COMPLETED" android:priority="999"/>

  • Немедленно запустить службу Foreground

Это может позволить вашей библиотекезапустите фоновую службу.

В качестве альтернативы, если у вас есть доступ к классу библиотеки BootReceiver, вы можете отключить его следующим образом:

PackageManager pm = getPackageManager();
ComponentName compName = 
      new ComponentName(getApplicationContext(), 
            <library_broadcastreceiver>.class);
pm.setComponentEnabledSetting(
      compName,
      PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 
      PackageManager.DONT_KILL_APP);
...