我试图在活动中要求获得许可,然后获得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)
}
}
答案 0 :(得分:1)
授予权限后不会重新创建活动。因此,在您的情况下,授予权限后,应用程序中什么也不会发生。这与撰写无关。您在setContentView()
所在的setContent {}
处将得到相同的行为。
将setContent {}
逻辑移到其他函数中。从您现在拥有的onCreate()
处调用它。并且,覆盖onRequestPermissionsResult()
,如果被授予权限,则从那里调用该函数。
另一种Compose-y方法将是remember
是否拥有许可,如果被授予许可,则从onRequestPermissionsResult()
更新该状态。从 inside setContent()
进行所有操作,然后Compose将根据状态更改进行重新组合。
答案 1 :(得分:0)
嗨,您可以使用片段来实现它。 您应该检查权限,请求并处理响应
如果授予了权限->导航至片段
如果未授予权限,请等到用户授予并响应后->导航至片段