Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
268 of 502 menu
◀ ▶

Метод 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,
    который передают в контракты запуска экрана
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить