致命错误 LifecycleOwners 在 registerForActivityResult 上启动之前必须调用 register
Fatal error LifecycleOwners must call register before they are STARTED on registerForActivityResult
我有一个简单的空 activity 检查是否需要请求权限。当调用 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.
根据我的研究,我 认为 我需要检查 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
}
}
}
}
}
您需要在 Activity 的 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)
}
}
我有一个简单的空 activity 检查是否需要请求权限。当调用 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.
根据我的研究,我 认为 我需要检查 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
}
}
}
}
}
您需要在 Activity 的 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)
}
}