【问题标题】:Permission from manifest doesn't work in Android 6清单的权限在 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 -- 该窗口类型的权限被拒绝

它甚至没有列出:

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

编辑:

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

【问题讨论】:

标签: android android-6.0-marshmallow


【解决方案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
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-20
  • 2015-11-27
相关资源
最近更新 更多