onActivityResult() 提前调用 Settings.ACTION_MANAGE_OVERLAY_PERMISSION

onActivityResult() is called to early for Settings.ACTION_MANAGE_OVERLAY_PERMISSION

我想为我的应用请求覆盖权限,以便在其他应用之上绘制。为此,我使用 ACTION_MANAGE_OVERLAY_PERMISSION

    Intent intent = new Intent(android.provider.Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getPackageName()));
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivityForResult(intent, 1234);

这很好用并显示了适当的设置屏幕,但是 onActivityResult 在设置 activity 首次显示时调用,而不是在销毁时调用,所以我从未在 onActivityResult 中获得许可。我错过了什么吗?

这是因为您正在开始一项新任务。来自documentation

[...] if the activity you are launching uses the singleTask launch mode, it will not run in your task and thus you will immediately receive a cancel result.

所以如果你删除它应该可以工作

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);