Регистрация приемника BOOT_COMPLETED в Android 8

Мы собираемся обновить наше приложение Android API 26. В документации по Broadcast Receiver там написано, что

Приложения, ориентированные на Android 8.0 или выше, больше не могут регистрировать широковещательные приемники для неявных широковещательных рассылок в своем манифесте.

Приемники неявной широковещательной передачи описываются как

трансляция, не предназначенная специально для этого приложения. Например, ACTION_PACKAGE_REPLACED

Поэтому я предполагаю, что android.intent.action.BOOT_COMPLETED считается неявным получателем.

Кроме того, в нем говорится, что неявные приемники должны быть зарегистрированы в Activity с помощью Context.registerReceiver(). Но это не имеет смысла для получателя, который ожидает событие BOOT_COMPLETED.

Как правильно с этим справиться? Могу ли я оставить этот получатель в своем манифесте?


person 4ndro1d    schedule 31.08.2017    source источник
comment
comment
Попробуйте этот способ реализовать github.com/devggaurav/   -  person Danial clarc    schedule 14.10.2019


Ответы (2)


BOOT_COMPLETED все еще принимается.

https://developer.android.com/guide/components/broadcast-exceptions.html

Не нужно ничего менять. Убедитесь, что вы тестируете Android 8.

person Frank    schedule 31.08.2017
comment
Позор Google за многими исключениями. Исключения как раз из-за плохого дизайна. - person saeed khalafinejad; 12.06.2019

ACTION_BOOT_COMPLETED находится в неявном белом списке вещания, поэтому вы можете зарегистрироваться для него. в манифесте.

person CommonsWare    schedule 31.08.2017
comment
Мне было интересно, что насчет собственного приложения для Android? Я не могу реализовать даже BOOT_COMPLETED, они должны быть выполнены (я думаю). Это изменение началось с API 26, а текущий API - 27. Есть ли у вас какие-нибудь идеи? - person efkan; 20.12.2017
comment
@efkan: Извините, но я не понимаю вашего комментария. Возможно, вы захотите задать отдельный вопрос о переполнении стека, в котором более подробно объясните, что вас беспокоит. - person CommonsWare; 20.12.2017
comment
Прошу прощения ... Я имел в виду, что разработчики Google должны использовать API 27 для разработки своих собственных приложений, таких как SMS, Duo или приложение Google Drive. Мне было интересно, как им удается запустить свое приложение с помощью действия BOOT_COMPLETED или другим способом? Вы имеете какое-нибудь представление об этом? - person efkan; 20.12.2017
comment
@efkan: Ничего не изменилось по отношению к ACTION_BOOT_COMPLETED с Android 8.0. - person CommonsWare; 20.12.2017
comment
Я создал новый вопрос по этому поводу: stackoverflow.com/q/47908463/3765109 После того, как я прочту ваши статьи на вашем блог Я догадывался, что в новейших API-интерфейсах что-то нестабильно. После вашего последнего комментария я начал думать, что мог где-то ошибиться. - person efkan; 20.12.2017
comment
Вы больше не можете использовать BOOT_COMPLETED для запуска службы - он запускает java.lang.IllegalStateException: Not allowed to start service Intent (my_service) : app is in background - person Someone Somewhere; 26.06.2018
comment
@SomeoneSomewhere: используйте startForegroundService() на Android 8.0+. - person CommonsWare; 26.06.2018