我正在尝试编写一个小类来处理权限检查。唯一的问题是onRequestPermissionsResult()永远不会被调用:
class PermissionHelper(val activity: Activity) : ActivityCompat.OnRequestPermissionsResultCallback{
interface OnPermissionRequested {
fun onPermissionResponse(isPermissionGranted: Boolean)
}
private var listener: OnPermissionRequested? = null
fun isPermissionGranted(permission: String) : Boolean {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
return activity.applicationContext.checkSelfPermission(permission) == PackageManager.PERMISSION_GRANTED
}
return true
}
fun requestPermission(permissions: Array<String>,
requestCode: Int,
listener: OnPermissionRequested) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
this.listener = listener
activity.requestPermissions(permissions, requestCode)
}
}
override fun onRequestPermissionsResult(requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray) {
val isPermissionGranted = grantResults.isNotEmpty() &&
grantResults[0] == PackageManager.PERMISSION_GRANTED
listener?.onPermissionResponse(isPermissionGranted)
}
companion object {
const val PERMISSIONS_REQUEST_READ_CALENDAR = 200
const val PERMISSIONS_REQUEST_WRITE_CALENDAR = 201
const val PERMISSIONS_REQUEST_CALENDAR = 101
const val PERMISSIONS_REQUEST_LOCATION = 102
const val READ_CALENDAR = Manifest.permission.READ_CALENDAR
const val WRITE_CALENDAR = Manifest.permission.WRITE_CALENDAR
const val ACCESS_FINE_LOCATION = Manifest.permission.ACCESS_FINE_LOCATION
}
}
会弹出请求权限的系统对话框,但永远不会处理响应。 (即,永远不会命中onRequestPermissionsResult()中的断点)。没有什么是空的,并且所有值都是正确的。
感谢您的帮助。
答案 0 :(得分:1)
onRequestPermissionsResult
将在您的Activity
上被调用。此代码中没有任何内容可以调用您的onRequestPermissionsResult
的{{1}}。
您在活动中需要此
PermissionHelper
答案 1 :(得分:0)
我的建议是将此库用于处理权限: https://github.com/Karumi/Dexter
如果您不想使用Dexter库,建议您使用ActivityCompat.requestPermissions()
而不是activity.requestPermissions()
您可以在此答案中找到更多信息: https://stackoverflow.com/a/56761238/5661680