我有一个简单的空活动,判断是否需要请求权限.当调用registerForActivityResult时,它会崩溃,错误java.lang.IllegalStateException: LifecycleOwner com.example.app.PermsRequester@41a30da is attempting to register while current state is RESUMED. LifecycleOwners must call register before they are STARTED.来self 的研究,我需要判断savedInstanceState是否是null,如果是,创建一个新的fragment?我不确定这是否是正确的解决方案,也不确定如何实施.代码如下:

class PermsRequester : AppCompatActivity() {
    requestPerms = false

    override fun onCreate(savedInstanceState: Bundle?) {
        setTheme(R.style.AppTheme)
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_perms_requester)

        findViewById<Button>(R.id.acceptButton).setOnClickListener { accepted() }
    }

    private fun accepted() {
        //There is code here to check if rationale dialog needs to be displayed
        //There is code here to build a mutable list of permissions that need to be requested and sets requestPerms = true

        if(requestPerms)
            requestPermissions()
    }

    private fun requestPermissions() {
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            //app crashes on the following line
            val requestMultiplePermissions = registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) {
                 permissions -> permissions.entries.forEach {
                     //Handles permission result
                 }
            }
        }
    }
}

推荐答案

你需要在活动的onStart之前达到registerForActivityResult分.

private lateinit var requestMultiplePermissionsLauncher: 
    ActivityResultLauncher<Array<String>>

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    requestMultiplePermissionsLauncher =
        registerForActivityResult(ActivityResultContracts.RequestMultiplePermissions()) { permissions ->
            permissions.entries.forEach {
                //Handles permission result
            }
        }
}

private fun accepted() {
    if(requestPerms) {
        val permissions = arrayOf(Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.CAMERA)
        requestMultiplePermissionsLauncher.launch(permissions)
    }
}

Kotlin相关问答推荐

在Kotlin中可以连接两个范围吗?

外键是主键的一部分,但不是索引的一部分.房间

如何让 LocalDateTime.parse 拒绝 24:00 时间

为什么Kotlin有次构造函数和init块?

如何缩短 MaterialTheme.colors.primary?

我可以在 Kotlin 中使用接口类型作为构造函数参数吗

如何在 Hibernate Panache 中进行部分搜索

Kotlin 条件格式字符串

为空数组添加值

T except one class

多次运行espresso测试

Kotlin 创建snackbar

防止导航到同一个片段

Jetpack Compose State:修改类属性

在kotlin中,如何模拟封装回调函数?

Kotlin中的测试无法访问受保护(protected)的方法

API 26 上未显示 Android 通知

如何在Kotlin中创建无限长的序列

kotlin中密封类和密封接口的区别是什么

将协程更新到 1.2.0 后构建失败:META-INF/atomicfu.kotlin_module