ActivityCompat onRequestPermissionsResult () не вызывается - PullRequest
0 голосов
/ 06 июля 2019

Я пытаюсь написать небольшой класс для проверки прав доступа. Единственная проблема заключается в том, что 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 ]

1 голос
/ 06 июля 2019

onRequestPermissionsResult будет вызван на ваш Activity.В этом коде нет ничего, что могло бы вызвать onRequestPermissionsResult вашего PermissionHelper.

Это необходимо в вашей деятельности

override fun onRequestPermissionsResult(requestCode: Int,
                                        permissions: Array<out String>,
                                        grantResults: IntArray) {
helper.onRequestPermissionsResult(requestCode, permissions, grantResults)
}
0 голосов
/ 06 июля 2019

Мое предложение - использовать эту библиотеку для прав доступа: https://github.com/Karumi/Dexter

Если вы не хотите использовать библиотеку Dexter, я предлагаю использовать ActivityCompat.requestPermissions() вместо activity.requestPermissions()

Вы можете найти больше информации в этом ответе: https://stackoverflow.com/a/56761238/5661680

...