首次设置后如何在活动中设置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将根据状态更改进行重新组合。

,

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

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

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