Для передачи и изменения результата между ресиверами используются следующие методы:
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
.