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

时间:2020-11-01 06:48:36

标签: android android-permissions android-jetpack-compose

我试图在活动中要求获得许可,然后获得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)
    }
}

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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

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

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