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

Класс RequestMultiplePermissions

Класс ActivityResultContracts.RequestMultiplePermissions принимает массив имён permission и возвращает карту имя-к granted. Регистрируют его через rememberLauncherForActivityResult. Каждое право должно быть в uses-permission. Для одного права проще RequestPermission.

Синтаксис

ActivityResultContracts.RequestMultiplePermissions()

Пример

Давайте запросим камеру и микрофон одним launch:

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.RequestMultiplePermissions(), ) { map -> val all = map.values.all { it } label = if (all) "12345" else "abcde" } Button(onClick = { launcher.launch( arrayOf( Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO, ), ) }) { Text(text = "abcde") } Text(text = label) } } }

На экране система покажет последовательность диалогов, текст станет "12345", если пользователь выдал все права.

Пример

Давайте проверим только камеру в карте результата:

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.RequestMultiplePermissions(), ) { map -> val cam = map[Manifest.permission.CAMERA] == true label = if (cam) "12345" else "abcde" } Button(onClick = { launcher.launch( arrayOf(Manifest.permission.CAMERA), ) }) { Text(text = "abcde") } Text(text = label) } } }

На экране текст сменится на "12345", если камера разрешена, даже при одном ключе в массиве.

Смотрите также

  • класс RequestPermission,
    контракт для одной строки permission
  • метод launch,
    куда передают arrayOf permissions
  • метод checkSelfPermission,
    проверка до показа диалогов
  • тег uses-permission,
    список прав в манифесте
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить