onRequestPermissionsResult (), запущенный в действии, а не во фрагменте - PullRequest
0 голосов
/ 14 ноября 2018

Я звоню requestPermissions() в своем фрагменте, и это фрагмент реализации этой функции (я не вызываю activity.requestPermission()). У меня есть onRequestPermissionsResult() в родительской активности и фрагменте. После вызова разрешения от Фрагмента это вызывает неправильный onRequestPermissionsResult(). Почему это происходит

Фрагменты запроса разрешения:

override fun onOptionsItemSelected(item: MenuItem?): Boolean {
    return if (item?.itemId == R.id.createNewChat) {
        if (activity.hasReadContactsPermission()) {
            startActivity(Intent(activity, PhoneBookActivity::class.java))
        } else {
            requestPermissions(
                arrayOf(Manifest.permission.READ_CONTACTS),
                Constants.MY_PERMISSIONS_READ_CONTACT
            )
        }
        true
    } else {
        super.onOptionsItemSelected(item)
    }
}

Фрагменты onRequestPermissionsResult():

override fun onRequestPermissionsResult(
    requestCode: Int,
    permissions: Array<String>,
    grantResults: IntArray
) {
    when (requestCode) {
        Constants.MY_PERMISSIONS_READ_CONTACT -> {
            if(grantResults[0] == PackageManager.PERMISSION_GRANTED){
                startActivity(Intent(activity, PhoneBookActivity::class.java))
            }
        }
    }
}

Деятельность onRequestPermissionsResult():

override fun onRequestPermissionsResult(
    requestCode: Int,
    permissions: Array<String>,
    grantResults: IntArray
) {
    when (requestCode) {
        Constants.MY_PERMISSIONS_MULTIPLE -> {
            if (grantResults.all { it == PackageManager.PERMISSION_GRANTED }) {
                startService(Intent(this, RegisterDeviceTokenTask::class.java))
                if (smartServiceBound) {
                    smart113Service!!.onMainActivityStarted()
                } else {
                    requestPermissionsUtil(
                        requiredPermissions,
                        Constants.MY_PERMISSIONS_MULTIPLE
                    )
                }
            }
        }
    }
}

Возможно, я мог бы прослушать эту проверку разрешений в Activity, но requestCode изменяется, когда он переходит от Fragment к Activity, и я не хочу с этим связываться.

Каково решение, чтобы вызвать onRequestPermissionResult() во Фрагменте?

...