Kotlin/Compose: Как получить активность. PermissionsRequest () Результат вне деятельности?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Kotlin/Compose: Как получить активность. PermissionsRequest () Результат вне деятельности?

Сообщение Anonymous »

Теперь с Androidx.Activity: 1.10.0 CompositionLocalProvider Предоставьте LocalActivity.current в любом месте дерева иерархии. Таким образом, в любом месте я могу вызвать Activity.requestpermissions , но не могу получить результат. Чтобы получить результат, мне нужно использовать RegisterFortivityResult или запомнить LuncherForactivityResult . Проблема здесь заключается в том, что RegisterForctivityResult можно назвать Inside Activity только, и помните, что LAUNCHERFARCATIONGRESULT является композитной функцией. Я просто не могу извлечь логику из пользовательского интерфейса. Есть ли какая -либо обертка для использования RegisterForctivityResult Outside MainActivity, как withContext (Activity) {RegisterFortivityResult}? Или может быть еще одним способом получить результат от Activity.requestpermissions ?fun requestPermission(
activity: ComponentActivity,
isGranted: (Boolean) -> Unit
) {
val permissionLauncher = activity.registerForActivityResult(
ActivityResultContracts.RequestPermission()
) { result ->
isGranted(result)
}

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.XX) {
if (activity.checkSelfPermission(Manifest.permission.PERMISSION_HERE) !=
PackageManager.PERMISSION_GRANTED ) {
permissionLauncher.launch(Manifest.permission.PERMISSION_HERE)
} else {
isGranted(true)
}
} else {
isGranted(true)
}
}

@Composable
fun SomeComposable() {
val activity = LocalActivity.current as ComponentActivity
var checked by remember { mutableStateOf(false) }

Switch(
checked = checked,
onCheckedChange = {
checked = !checked
if (checked) {
requestPermission(activity) { result ->
//DO SOMETHING WITH RESULT
}
} else {
//DO SOMETHING WITH RESULT
}
}
)
}
< /code>
Я должен справиться с этим таким: < /p>
@Composable
fun SomeComposable() {
val activity = LocalActivity.current
var checked by remember { mutableStateOf(false) }
val launcher = rememberLauncherForActivityResult(
ActivityResultContracts.RequestPermission()
) { result ->
//DO SOMETHING WITH RESULT
}

Switch(
checked = checked,
onCheckedChange = {
checked = !checked
if (checked) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.XX) {
if (activity?.checkSelfPermission(Manifest.permission.PERMISSION_HERE) !=
PackageManager.PERMISSION_GRANTED ) {
launcher.launch(Manifest.permission.PERMISSION_HERE)
} else {
//DO SOMETHING WITH RESULT
}
} else {
//DO SOMETHING WITH RESULT
}
} else {
//DO SOMETHING WITH RESULT
}
}
)
}


Подробнее здесь: https://stackoverflow.com/questions/795 ... e-of-activ
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»