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

适配Android 13:悬浮窗与通知权限请求问题求助

适配Android 13的两个问题解决方案

一、替换废弃的startActivityForResult实现悬浮窗权限请求

Android 11起官方推荐用Activity Result API替代旧的startActivityForResult和onActivityResult,核心是通过ActivityResultLauncher注册回调,无需重写生命周期方法,逻辑更清晰。

修改后的完整代码:

// 1. 在Activity类中声明全局的ActivityResultLauncher
private ActivityResultLauncher<Intent> overlayPermissionLauncher;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // 2. 初始化Launcher,定义权限回调逻辑
    overlayPermissionLauncher = registerForActivityResult(
            new ActivityResultContracts.StartActivityForResult(),
            result -> {
                // 权限设置页返回后,直接重新检查权限状态即可
                if (!Settings.canDrawOverlays(this)) {
                    errorToastDrawOverOtherApp();
                    finish();
                }
            });
}

// 3. 修改权限请求方法
private void askForSystemOverlayPermission() {
    if (!Settings.canDrawOverlays(this)) {
        Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
                Uri.parse("package:" + getPackageName()));
        // 用Launcher启动权限设置页面
        overlayPermissionLauncher.launch(intent);
    }
}

关键说明:

  • 不需要再重写onActivityResult,所有结果处理逻辑都封装在registerForActivityResult的回调里
  • 悬浮窗权限设置页不会返回明确的resultCode,所以直接重新检查权限状态是最可靠的方式

二、通知权限的检查时机问题

关于POST_NOTIFICATIONS权限的检查,给出明确结论和实践建议:

  1. 每次发送通知前都应该检查:用户可能在应用运行期间随时去系统设置关闭通知权限,如果不检查直接调用notify(),会抛出SecurityException导致崩溃。
  2. 启动时提前请求权限:在主Activity启动时先检查并请求通知权限,后续发送通知时的检查只是快速判断(不会重复弹出请求弹窗),避免频繁打扰用户。
  3. 替代方案:捕获异常:如果不想每次检查,也可以在调用notify()时捕获SecurityException,此时再引导用户去设置开启权限,但这种方式不如主动检查友好。

推荐实践代码:

public void sendNotification(int notificationID, Notification notification) {
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED) {
        // 权限未授予,可在这里引导用户跳转到设置页,或者做静默处理
        return;
    }
    notificationManager.notify(notificationID, notification);
}

内容的提问来源于stack exchange,提问作者zaxunobi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 14:05:01