Приемник вещания на Android Oreo - PullRequest
0 голосов
/ 11 июня 2018

У меня есть класс приемника с изменением сети, и он распространяется от широковещательного приемника, но я не совсем уверен, что он работает в Android Oreo, поддерживает ли Oreo широковещательный приемник, и если он не поддерживает, каков другой способсделай это

Ответы [ 2 ]

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

Oreo поддерживает приемники широковещания, но с некоторые ограничения на неявную трансляцию, объявленные в манифесте.

Неявная и явная трансляция:

Согласно документации , неявная трансляция - это трансляция, которая не предназначена специально для этого приложения.Например, ACTION_PACKAGE_REPLACED - это неявная широковещательная рассылка, поскольку она отправляется всем зарегистрированным слушателям, давая им знать, что какой-то пакет на устройстве был заменен.

Однако ACTION_MY_PACKAGE_REPLACED не является неявной трансляцией, поскольку она отправляется только приложению, пакет которого был заменен, независимо от того, сколько других приложений зарегистрировали прослушиватели для этой трансляции.

Итаклюбые широковещательные приемники, которые мы определили статически в манифесте приложения, которые прослушивают неявные широковещательные рассылки, больше не будут получать эти широковещательные сообщения.

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

Но существует список исключений, когда это происходитнеявные трансляции - это означает, что есть еще некоторые, для которых вы можете зарегистрироваться для получения трансляций.Все они перечислены ниже:

enter image description here

Таким образом, если трансляция, для которой вы зарегистрировали приемников, находится в этом списке, то она все равно будет работать так же, как и раньше.ранее.Однако, если широковещание, которое вы зарегистрировали для получения, отсутствует в этом списке, вам следует использовать другое альтернативное решение, например:

  • Создать получателя во время выполнения, вызвав Context.registerReceiver(), вместо того, чтобы объявить получателяв манифесте.
  • Используйте запланированное задание для проверки условия, которое вызвало бы неявную трансляцию.

Для получения дополнительной информации

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

Это не поддерживается в Oreo в качестве тега манифеста, вам необходимо зарегистрировать его в Service / Activity с помощью context.registerReceiver ().Или вы используете WorkManager, чтобы запланировать что-то для определенных условий сети.

...