Я звоню 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()
во Фрагменте?