Android M检测权限对话框是否可见

Android M检测权限对话框是否可见,android,android-permissions,android-6.0-marshmallow,Android,Android Permissions,Android 6.0 Marshmallow,如何以编程方式确定用户是否可以看到权限对话框,以便我知道在这种情况下该怎么办?权限对话框是放置在活动堆栈顶部的活动。因此,当您调用requestPermission()方法Activity时,实现会要求PackageManager生成将启动此活动对话框的意图。此意图具有操作\u请求\u权限 您可能需要侦听活动堆栈更改,并检查活动意图是否具有ACTION\u REQUEST\u权限ACTION。我不确定获取运行任务是否会给您列出此活动,因为我自己没有尝试过,只是为了让您继续 @Override p

如何以编程方式确定用户是否可以看到权限对话框,以便我知道在这种情况下该怎么办?

权限对话框是放置在活动堆栈顶部的活动。因此,当您调用
requestPermission()
方法
Activity
时,实现会要求
PackageManager
生成将启动此活动对话框的意图。此意图具有
操作\u请求\u权限

您可能需要侦听活动堆栈更改,并检查活动意图是否具有
ACTION\u REQUEST\u权限
ACTION。我不确定获取运行任务是否会给您列出此活动,因为我自己没有尝试过,只是为了让您继续

@Override
protected void onStart() {
    super.onStart();
        ActivityManager am = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
        ComponentName cn = am.getRunningTasks(1).get(0).topActivity;
        if ("com.android.packageinstaller.permission.ui.GrantPermissionsActivity".equals(cn.getClassName())){
            //permission dialog is displayed
        }
}`

`

AFAIK没有干净的方法来检测权限对话框是否对屏幕可见。通过hack,你可以,我有点晚了,但我刚刚尝试了这个,效果不错!我曾经使用布尔标志来实现这一点,但您的解决方案也可以派上用场。感谢getRunningTasks()现在已被弃用,因此此解决方案在将来可能不可行。