微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

首次设置后如何在活动中设置Content

如何解决首次设置后如何在活动中设置Content

我试图在活动中要求获得许可,然后获得compose的功能,但是当我第一次获得许可时,它无法直接获得compose的内容

class MainActivity : AppCompatActivity() {

    val viewmodel by viewmodels<Mainviewmodel>()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        if (allPermissionsGranted()) {
            // the setContent code not executed after getting the permission first time
            setContent {
                MyTheme {
                    Main(
                        viewmodel = viewmodel,backdispatcher = onBackpresseddispatcher
                    )
                }
            }
        } else {
            ActivityCompat.requestPermissions(
                this,required_PERMISSIONS,REQUEST_CODE_PERMISSIONS)
        }
    }

    private fun allPermissionsGranted() = required_PERMISSIONS.all {
        ContextCompat.checkSelfPermission(
            baseContext,it) == PackageManager.PERMISSION_GRANTED
    }

    companion object {
        private const val REQUEST_CODE_PERMISSIONS = 10
        private val required_PERMISSIONS = arrayOf(Manifest.permission.CAMERA)
    }
}

解决方法

授予权限后不会重新创建活动。因此,在您的情况下,授予权限后,应用程序中什么也不会发生。这与撰写无关。您在setContentView()所在的setContent {}处将得到相同的行为。

setContent {}逻辑移到其他函数中。从您现在拥有的onCreate()处调用它。并且,覆盖onRequestPermissionsResult(),如果被授予权限,则从那里调用该函数。

另一种Compose-y方法将是remember是否拥有许可,如果被授予许可,则从onRequestPermissionsResult()更新该状态。从 inside setContent()进行所有操作,然后Compose将根据状态更改进行重新组合。

,

嗨,您可以使用片段来实现它。 您应该检查权限,请求并处理响应

如果授予了权限->导航至片段

如果未授予权限,请等到用户授予并响应后->导航至片段

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。