清单的权限在 Android 6 中不起作用

Posted

技术标签:

【中文标题】清单的权限在 Android 6 中不起作用【英文标题】:Permission from manifest doesn't work in Android 6 【发布时间】:2015-11-10 18:31:11 【问题描述】:

它完全忽略:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

所以我得到了例外:

原因:android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@86fb55b -- 该窗口类型的权限被拒绝

它甚至没有列出:

我应该如何解决它?谢谢。

编辑:

它在配置应用程序/高级/绘制其他应用程序中列出。所以我打开它,现在它工作正常,但是为什么在我运行我的应用程序时没有任何对话框询问权限?所有权限都被默认关闭了,我需要去设置并手动打开它吗?

【问题讨论】:

我也遇到了这个问题。我也尝试通过调用Activity#requestPermissions() 来获得SYSTEM_ALERT_WINDOW 的权限,但这不起作用。 我在这里提出了一个错误报告:code.google.com/p/android-developer-preview/issues/… 顺便说一句,权限列在设置 -> 应用程序 -> 顶部栏中的齿轮图标 -> 绘制在其他应用程序上(在高级部分下)。非常非常隐蔽! Unable to add window android.view.ViewRoot$W@44da9bc0 -- permission denied for this window type的可能重复 【参考方案1】:

感谢CommonsWare's blog post,我得到了一些线索。

假设您的代码在ActivityFragment 中,请检查覆盖权限并在必要时提出请求:

public static int OVERLAY_PERMISSION_REQ_CODE = 1234;

public void someMethod() 
    if (!Settings.canDrawOverlays(this)) 
        Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
                Uri.parse("package:" + getPackageName()));
        startActivityForResult(intent, OVERLAY_PERMISSION_REQ_CODE);
    

然后,重新检查权限以获得更好的用户体验:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    if (requestCode == OVERLAY_PERMISSION_REQ_CODE) 
        if (!Settings.canDrawOverlays(this)) 
            // SYSTEM_ALERT_WINDOW permission not granted...
        
    

【讨论】:

谢谢!它可以工作,但它不显示正常(小)对话框,当我请求权限时它显示全屏对话框,你可以在这里看到:imgur.com/eWf5DSC 这是正常的吗? 嗯……我不确定。正如 CommonsWare 在其博客文章中提到的那样,关于 SYSTEM_ALERT_WINDOW 更改的文档很少(或没有)。可以有一种更简单的方法,例如通过一个小对话框询问权限,但目前,我知道这种方法是唯一的。 您的解决方案适合我。但是 android 文档中提供的常规方式不起作用(developer.android.com/training/permissions/requesting.html 是的,但是这个权限被破坏了。如果用户在设置中禁用此权限,并且某些服务(需要此权限)正在运行,会发生什么?在这种情况下,无法通知服务自行关闭,因为没有上下文,所以我所能做的就是捕获异常。 在通过Android Service 调用一些覆盖绘制时如何添加此权限? 示例:ChatHead Draw

以上是关于清单的权限在 Android 6 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Android ACTION_CALL 不起作用[重复]

navigator.permissions.query 在 android/ios webview 中不起作用

为什么新的Firebase Crashlytics(没有Fabric)在Android中不起作用?

@font-face 在 Firefox 中不起作用 [重复]

权限不起作用

套接字在发布版本中不起作用 React Native