从Android 11开始,安全性增强措施要求应用在使用某些权限或启动某些Activity时,必须使用ActivityResultContract。 由于此变更,ActivityResult的情况仅在RESULT_CANCELLED时返回,而不是应该返回所需结果的情况。要解决这个问题:
1.在调用startActivity时,使用registerForActivityResult方法为ActivityResultContract注册回调。例如:
val result = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result -> // Handle the result }
2.当您的Activity完全初始化并准备好处理ActivityResult时,调用该ActivityResultContract,如下所示:
val intent = Intent(…) result.launch(intent)
3.在onActivityResult方法中使用callback.onActivityResult而不是直接使用结果。例如:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) callback.onActivityResult(requestCode, resultCode, data) }
以上是解决在Android 11中ActivityResult只返回RESULT_CANCELED的解决方案。