Android 14全屏通知设置跳转失败求助(Pixel 6a设备)
全屏通知权限跳转设置页异常解决方案
问题场景
基于Android 14(API 34)的新API检查应用是否拥有全屏通知权限,当权限未开启时,尝试通过Google官方提供的ACTION_MANAGE_APP_USE_FULL_SCREEN_INTENT Intent跳转至设置页面,在Google Pixel 6a设备上触发ActivityNotFoundException,错误信息如下:
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.settings.MANAGE_APP_USE_FULL_SCREEN_INTENT flg=0x10000000 (has extras) }
用户原代码:
button1.setOnClickListener(v -> { NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); if (Build.VERSION.SDK_INT >= 34) { if(!notificationManager.canUseFullScreenIntent()){ //method 1 startActivity(new Intent(Settings.ACTION_MANAGE_APP_USE_FULL_SCREEN_INTENT) .putExtra(Settings.EXTRA_APP_PACKAGE,getPackageName()) .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)); //method 2 startActivity(new Intent(Settings.ACTION_MANAGE_APP_USE_FULL_SCREEN_INTENT, Uri.parse(getPackageName()))); } } });
解决方案
1. 修正Intent的Uri格式
ACTION_MANAGE_APP_USE_FULL_SCREEN_INTENT要求Intent的Data Uri必须以package:作为前缀,直接传入包名字符串会导致系统无法匹配到对应的设置Activity。同时,该Intent不需要传递EXTRA_APP_PACKAGE参数,仅需设置正确的Uri即可。
2. 增加Intent有效性检查
即使是官方API,也可能存在部分定制ROM不支持的情况,提前检查Intent是否能被处理可以避免崩溃。
修正后的完整代码
button1.setOnClickListener(v -> { NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { // 对应API 34 if (!notificationManager.canUseFullScreenIntent()) { Intent intent = new Intent(Settings.ACTION_MANAGE_APP_USE_FULL_SCREEN_INTENT); // 必须使用package:前缀的Uri格式 intent.setData(Uri.parse("package:" + getPackageName())); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 检查是否有Activity能处理该Intent if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } else { // 备用方案:跳转到应用详细设置页,引导用户手动开启 Intent fallbackIntent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); fallbackIntent.setData(Uri.parse("package:" + getPackageName())); startActivity(fallbackIntent); Toast.makeText(this, "请在应用设置中找到「全屏通知」选项开启权限", Toast.LENGTH_SHORT).show(); } } } });
关键说明
- 使用
Build.VERSION_CODES.UPSIDE_DOWN_CAKE替代硬编码34,代码可读性更强且符合规范。 - 备用方案跳转至应用详细设置页,确保在特殊系统环境下用户仍能手动开启权限。
内容的提问来源于stack exchange,提问作者蒋文杰
相关产品推荐
相关产品推荐

