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

Класс RequestPermission

Класс ActivityResultContracts.RequestPermission - контракт для одной строки android.permission.*. Его передают в rememberLauncherForActivityResult, а в launch отдают имя разрешения. В манифесте право заранее объявляют uses-permission, проверку делают checkSelfPermission.

Синтаксис

ActivityResultContracts.RequestPermission()

Пример

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

import android.Manifest import android.content.pm.PackageManager 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 import androidx.core.content.ContextCompat 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 = { val ok = ContextCompat.checkSelfPermission( this@MainActivity, Manifest.permission.CAMERA, ) == PackageManager.PERMISSION_GRANTED if (!ok) { launcher.launch(Manifest.permission.CAMERA) } else { label = "12345" } }) { Text(text = "abcde") } Text(text = label) } } }

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

Пример

Давайте запросим уведомления на новых API:

import android.Manifest import android.os.Bundle import android.os.Build 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 = { if (Build.VERSION.SDK_INT >= 33) { launcher.launch( Manifest.permission.POST_NOTIFICATIONS, ) } }) { Text(text = "abcde") } Text(text = label) } } }

На экране на API 33+ появится запрос POST_NOTIFICATIONS, текст сменится по ответу.

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

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить