Я вызываю 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() во фрагменте?
Попробовала, через 2 дня нашла решение! Отсутствовал else -> super.onRequestPermissionsResult(requestCode, permissions, grantResults) в Activity onRequestPermissionsResult()
попробуйте использовать
fragment.requestPermissions()