You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,提问作者蒋文杰

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 00:39:58