未调用ActivityCompat onRequestPermissionsResult()

时间:2019-07-05 21:26:26

标签: android permissions android-permissions

我正在尝试编写一个小类来处理权限检查。唯一的问题是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()中的断点)。没有什么是空的,并且所有值都是正确的。

感谢您的帮助。

2 个答案:

答案 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