尽管已授予SYSTEM_ALERT_WINDOW权限,但DRAW OVERLAY无法正常工作

时间:2019-01-07 08:20:14

标签: android permissions

这使我发疯....因为我的智能手机具有API> 23,所以我的youtube覆盖不再起作用....所以我实现了所有必要的东西。 现在,我的应用程序请求绘制覆盖图的权限(SYSTEM_ALERT_WINDOW),如果我调试了我的应用程序,那么我看到该权限被授予。但是,如果我启动叠加层,则会收到此错误消息:

  

AndroidRuntime:致命例外:main java.lang.RuntimeException:   无法创建服务...:   android.view.WindowManager $ BadTokenException:无法添加窗口   android.view.ViewRootImpl$W@479d57e-窗口权限被拒绝   2002型

清单中的权限如下:

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

我请求许可:

Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, MainActivity.PERMISSIONS_REQUEST_SYSTEM_ALERT_WINDOW);

我这样检查权限:

if (Settings.canDrawOverlays(this)) {
   permissionShowYoutubeOverlayIsOK = true;
}

那么,这到底是怎么了?

感谢您的帮助!

再见 菲尔

2 个答案:

答案 0 :(得分:0)

根据有关针对Android 8.0的应用的Android 8.0行为更改的文档:

  

使用SYSTEM_ALERT_WINDOW权限的应用程序不能再使用以下窗口类型在其他应用程序和系统窗口上方显示警报窗口:

     

TYPE_PHONE,   TYPE_PRIORITY_PHONE,   TYPE_SYSTEM_ALERT,   TYPE_SYSTEM_OVERLAY,   TYPE_SYSTEM_ERROR

     

应用必须使用新的窗口类型TYPE_APPLICATION_OVERLAY

因此,您必须降低TargetSDK或使用更新的TYPE_xxxxx

答案 1 :(得分:0)

谢谢!真的有帮助:) 但是还有更多步骤可以做:

  1. 按照您的描述更改为TYPE_APPLICATION_OVERLAY

  2. 添加权限:

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

请参阅: Permission Denial: startForeground requires android.permission.FOREGROUND_SERVICE

  1. 需要新的通知渠道

    请参阅:startForeground fail after upgrade to Android 8.1

现在它终于可以正常运行了:) 谢谢!!