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

使用registerForActivityResult检查ACTION_MANAGE_OVERLAY_PERMISSION时Toast不显示问题

问题原因

  • ACTION_MANAGE_OVERLAY_PERMISSION 对应的系统悬浮窗权限设置页,无论用户是否授予权限,返回的resultCode固定为Activity.RESULT_CANCELED,你代码中判断result.getResultCode() == Activity.RESULT_OK的分支永远无法命中,所以Toast不会弹出。

修复方案

无需判断返回的resultCode,直接在回调中调用Settings.canDrawOverlays()方法主动校验悬浮窗权限状态即可,同时建议启动Intent时传入当前应用包名,可直接跳转到对应应用的悬浮窗权限设置页,优化用户操作路径:

权限声明(AndroidManifest.xml)

<!-- 需提前声明悬浮窗权限 -->
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

修正后的业务代码

// 注册ActivityResultLauncher
ActivityResultLauncher<Intent> mStartForResult = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),
        new ActivityResultCallback<ActivityResult>() {
            @Override
            public void onActivityResult(ActivityResult result) {
                // 主动校验悬浮窗权限是否已授予
                if (Settings.canDrawOverlays(MainActivity.this)) {
                    Toast.makeText(MainActivity.this,"Ok",Toast.LENGTH_SHORT).show();
                    // 权限授予后的后续业务逻辑写在此处
                }
            }
        });

// 启动悬浮窗权限设置页
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
// 传入当前应用包名,直接跳转对应应用的权限设置项
intent.setData(Uri.parse("package:" + getPackageName()));
mStartForResult.launch(intent);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:06:03