Есть такие действия, которые как правило пишешь в коде один раз и потом долго к ним не возвращаешься. Вот и запрос разрешений, как мне кажется, именно из этой области.

Время идет, Google вносит изменения в свои контракты, и не всегда успеваешь поправить то, что задеприкейчено по горячим следам. Не стало исключением и получение результата из одной астивити в другую.

Если вы решите использовать метод onFctivityResult() вы увидите, что IDE подсветит вам данный метод и сообщит, что:

This declaration overrides deprecated member but not marked as deprecated itself. This deprecation won't be inherited in future releases. Please add @Deprecated annotation or suppress. See https://youtrack.jetbrains.com/issue/KT-47902 for details

Если есть вопрос, то надо найти на него ответ.

Документация от Googl'а довольно подробно описывает как использовать новый ActivityResult API и как его тестировать. Но вопрос остается открытым для тех случаев, когда используется Jet Pack Compose. А может я плохо искала? В любом случае ответ я получила и он оказался очень симпатичным.

Мне надо было проверить наличие разрешения на чтение контактов и если таковое не выдано, запросить его.

@Composable
fun ContactsScreen() {
    val isPermissionGranted = remember { mutableStateOf(false) }
    val launcher =
        rememberLauncherForActivityResult(contract = ActivityResultContracts.RequestMultiplePermissions()) {
            it.entries.forEach { map ->
                Log.i("tag", "${map.key} -> ${map.value}")
                isPermissionGranted.value = map.value
            }
        }

    ....
    LaunchedEffect(key1 = null) {
        launcher.launch(arrayOf(android.Manifest.permission.READ_CONTACTS))
    }
}

Вот так красиво это получилось. Мнение о красоте субъективное, так что вы можете с ним не согласиться :)

Комментарии (4)


  1. Rusrst
    29.10.2023 15:25
    +1

    Обалдеть, целая статья, а в документации то все есть же...

    https://developer.android.com/jetpack/compose/libraries#activity_result


    1. arsinde
      29.10.2023 15:25

      Вы немного невнимательно прочитали. Я написала, что видимо не нашла. ???? мне было прикольно найти путь самой. Я это сделала и мне полегчало.


  1. NikCapko
    29.10.2023 15:25

    как павило


  1. JajaComp
    29.10.2023 15:25

    Для этого лучше использовать accompanist https://google.github.io/accompanist/permissions/