Чтобы остановить упорядоченный броадкаст используется метод
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.