Android13(targetSdk33)POST_NOTIFICATIONS权限弹窗不显示求助
Android 13调用ActivityCompat.requestPermissions无通知权限弹窗问题
试过多种方案均无效,核心问题是调用ActivityCompat.requestPermissions时,请求通知权限的弹窗完全不触发。
环境配置
- 测试设备:Android 13物理机(三星Galaxy S22、Galaxy A51)
- targetSdkVersion = 33
- compileSdkVersion = 33
- minSdkVersion = 23
- AndroidManifest已添加权限:
<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”,返回上一Activity时出现界面冻结 - 尝试替换为
ActivityResultLauncher实现,问题依旧,无权限弹窗
内容的提问来源于stack exchange,提问作者Shahzore Ahmed
相关产品推荐
相关产品推荐

