Как передать результат следующему ресиверу при упорядоченном броадкасте? Как остановить упорядоченный броадкаст?

Посмотреть в Telegram: @AndroidSobes/33
Чтобы остановить упорядоченный броадкаст используется метод abortBroadcast().

Для передачи и изменения результата между ресиверами используются следующие методы:

setResultCode(code: Int) / getResultCode() – позволяют передать целочисленное значение. getResultCode() по умолчанию возвращает -1.

setResultData(data: String) / getResultData() – передают строковое значение следующим ресиверам. Значение по умолчанию – null.

setResultExtras(extras: Bundle) / getResultExtras(makeMap: Boolean) – самые полезные методы, потому что позволяют передать практически все что угодно в объекте Bundle. getResultExtras(makeMap: Boolean) по умолчанию возвращает пустой объект Bundle, если параметр makeMap = true, иначе возвращает null.

Метод setResult(code: Int, data: String, extras: Bundle) задает три типа результата одновременно.

Все перечисленные методы работают только с упорядоченными броадкастами. Узнать упорядоченный ли броадкаст внутри ресивера можно с помощью метода isOrderedBroadcast().

Результат, заданный в одном из упорядоченных ресиверов, передается всем последующим пока не будет изменен.
Допустим зарегистрированы ресиверы R1, R2, R3, R4. Сначала R1 получает resultCode = -1. R1 вызывает метод setResultCode(1). R2 получает resultCode = 1 и не изменяет его. R3 тоже получает resultCode = 1 и вызывает метод setResultCode(3). R4 получает resultCode = 3.