作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我关注了这个tutorial通过 RequestMultiplePermissions
合约实现一种通过 Results API 请求应用程序权限的新方法。尽管显示了权限对话框并且权限结果通过系统传播到应用程序首选项等,但我提供的 ActivityResultCallback
根本没有收到通知。
这是我的源代码。我知道我没有检查用户是否已经拒绝了权限:
private fun checkPermissions() {
val permissionList = arrayOf(
Manifest.permission.CAMERA,
Manifest.permission.ACCESS_FINE_LOCATION
)
val notGrantedPermissions = permissionList.map {
Pair(
it, ContextCompat.checkSelfPermission(
applicationContext,
it
)
)
}.filter {
it.second != PackageManager.PERMISSION_GRANTED
}
.map { it.first }
.toTypedArray()
if (notGrantedPermissions.isEmpty()) {
nextActivity()
} else {
requestPermissionLauncher.launch(notGrantedPermissions)
}
}
private val requestPermissionLauncher = registerForActivityResult(
ActivityResultContracts.RequestMultiplePermissions()
) { result ->
info("> requestPermissionLauncher - ${result.values}")
if (result.values.all { it }) {
nextActivity()
} else {
longToast("All permissions are required for app to work correctly")
checkPermissions()
}
}
我是否遗漏了文档中的任何内容?
最佳答案
今晚我遇到了同样的问题。我打赌你要么扩展 AppCompatActivity 或类似的东西。问题是,当 super.onRequestPermissionsResult
被调用时,它会落到 FragmentActivity 实现上,它本身不会调用 super 方法,因此链会死在那里。快速的解决方案是直接扩展 ComponentActivity。但是,如果这对您的解决方案不可行,您可以重写该方法,如下所示:
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
activityResultRegistry.dispatchResult(requestCode, Activity.RESULT_OK, Intent()
.putExtra(EXTRA_PERMISSIONS, permissions)
.putExtra(EXTRA_PERMISSION_GRANT_RESULTS, grantResults))
}
以上是 ComponentActivity 方法的直接端口。
关于android - 未为 RequestMultiplePermissions 调用 ActivityResultCallback,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62673703/
我关注了这个tutorial通过 RequestMultiplePermissions 合约实现一种通过 Results API 请求应用程序权限的新方法。尽管显示了权限对话框并且权限结果通过系统传播
我是一名优秀的程序员,十分优秀!