我知道,关于这个话题已经有很多问题了。但是,到目前为止,我找到的所有答案都无法为我解决问题。
问题是 ActivityCompat.requestPermissions 不会触发弹出窗口,要求用户授予通知权限。
设置:
<uses-permission
android:name="android.permission.POST_NOTIFICATIONS"/>
AndroidManifest 中声明的 Activity
<activity android:name=".PostNotificationActivity"
android:exported="true"
android:screenOrientation="portrait"/>
点击启用通知按钮:
if (ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.POST_NOTIFICATIONS)) {
ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.POST_NOTIFICATIONS),
POST_NOTIFICATION_PERMISSION_CODE)
} else {
ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.POST_NOTIFICATIONS),
POST_NOTIFICATION_PERMISSION_CODE)
}
}
回调是这样的:
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
when(requestCode) {
POST_NOTIFICATION_PERMISSION_CODE -> {
if (grantResults.size > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(applicationContext, "Permission Granted", Toast.LENGTH_LONG).show()
} else {
Toast.makeText(applicationContext, "Permission Denied", Toast.LENGTH_LONG).show()
}
return
}
}
}
我已经通过调试器逐步执行代码,并且可以确认在第一次单击按钮时调用了 requestPermissions 但设备上没有弹出窗口并且 onRequestPermissionsResult 也没有触发。 当再次单击按钮requestPermissions时,设备上没有弹出窗口被调用,但onRequestPermissionsResult现在被Permission Denied触发,当按下返回时,先前的活动被冻结。
我也尝试过使用新的 ActivityResultLauncher,但行为是相同的,没有在设备上弹出。
我遇到了类似的问题,忘记更新我的 gradle 构建文件以将目标 SDK 设置为 33。更新目标 SDK 为我解决了这个问题。