Как вернуть результат при возвращении из другого приложения

«Как вернуть результат при возвращении из другого приложения» — вопрос из категории Android компоненты, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для возврата результата из другого приложения используйте startActivityForResult() (или registerForActivityResult с новым API). В вызываемом приложении установите результат через setResult() перед finish().

Пример в вызывающем активити:

val intent = Intent(Intent.ACTION_PICK)
startActivityForResult(intent, REQUEST_CODE)

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
        val result = data?.getStringExtra("key")
    }
}

В вызываемом активити:

val resultIntent = Intent().apply {
    putExtra("key", "result data")
}
setResult(RESULT_OK, resultIntent)
finish()

Для нового API (Activity Result API):

val launcher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
    if (result.resultCode == RESULT_OK) {
        val data = result.data?.getStringExtra("key")
    }
}
launcher.launch(intent)