Функция rememberLauncherForActivityResult
Функция rememberLauncherForActivityResult
регистрирует контракт Activity Result
в Compose и возвращает
ActivityResultLauncher.
Первый аргумент - контракт, например
RequestPermission,
второй - лямбда с результатом.
Аналог
registerForActivityResult
для composable.
Синтаксис
val launcher = rememberLauncherForActivityResult(
ActivityResultContracts.RequestPermission(),
) { granted -> }
Параметры
| Параметр | Описание |
|---|---|
contract |
Объект контракта: RequestPermission, PickVisualMedia и другие. |
onResult |
Лямбда, которую вызывают, когда пользователь закончил диалог или второй экран. |
Пример
Давайте запросим одно разрешение по кнопке:
import android.Manifest
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.compose.setContent
import androidx.activity.result.contract.ActivityResultContracts
import androidx.compose.material3.Button
import androidx.compose.material3.Text
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
var label by remember { mutableStateOf("abcde") }
val launcher = rememberLauncherForActivityResult(
ActivityResultContracts.RequestPermission(),
) { granted ->
label = if (granted) "12345" else "abcde"
}
Button(onClick = {
launcher.launch(Manifest.permission.CAMERA)
}) {
Text(text = "abcde")
}
Text(text = label)
}
}
}
На экране после выдачи камеры текст
сменится на "12345".
Смотрите также
-
класс
ActivityResultLauncher,
который возвращает функция -
класс
RequestPermission,
контракт одного разрешения -
метод
checkSelfPermission,
которым проверяют право до launch -
тег
uses-permission,
где объявляют CAMERA в манифесте