Метод registerForActivityResult
Метод registerForActivityResult у
ComponentActivity
связывает ActivityResultContract
с лямбдой результата.
Регистрацию делают до STARTED,
обычно в поле класса или в onCreate.
Запуск через launch у возвращённого launcher.
Для перехода на другой экран контракты
работают с Intent.
Синтаксис
val launcher = registerForActivityResult(contract) { res ->
// handle result
}
Параметры
| Параметр | Описание |
|---|---|
contract |
Контракт, например ActivityResultContracts.RequestPermission
или StartActivityForResult.
|
callback |
Лямбда с результатом после закрытия другого экрана или системного диалога. |
Пример
Давайте запросим одно разрешение через контракт:
import android.Manifest
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.result.contract.ActivityResultContracts
import androidx.compose.material3.Button
import androidx.compose.material3.Text
class MainActivity : ComponentActivity() {
private val requestPermission = registerForActivityResult(
ActivityResultContracts.RequestPermission(),
) { granted ->
// handle granted
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
Button(onClick = {
requestPermission.launch(Manifest.permission.CAMERA)
}) {
Text("abcde")
}
}
}
}
На экране кнопка "abcde", нажатие открывает
системный запрос разрешения, ответ придёт в callback.
Смотрите также
-
класс
ComponentActivity,
где регистрируют launcher -
метод
shouldShowRequestPermissionRationale,
который подсказывает текст перед запросом -
метод
checkSelfPermission,
который проверяет разрешение до launch -
класс
Intent,
который передают в контракты запуска экрана