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);
我想为我的应用请求覆盖权限,以便在其他应用之上绘制。为此,我使用 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);