清单:
<uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />
<uses-permission android:name="android.permission.ACTION_MANAGE_OVERLAY_PERMISSION" />
代码activity.onCreate():
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && BuildConfig.DEBUG) {
if (!Settings.canDrawOverlays(this)) {
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, OVERLAY_PERMISSION_REQ_CODE);
}
}
问题: Settings.canDrawOverlays(this)返回false,即使已经授予了权限。在更新Pixel to Oreo之前没有发生过。
Android版:8.0.0
我尝试更新构建工具:到26.0.1并将目标和compileSdk更新为26。 它在第一次启动时有所帮助:在切换后它返回true,但下次启动应用程序时它会再次返回false。
答案 0 :(得分:1)
问题出在Android Oreo本身。
在我安装了安全补丁后,它就消失了。
解决方案:安装最新的安全补丁。
答案 1 :(得分:0)
所以我遇到了这个问题,我最好的猜测是现在在android O中,canDrawOverlays的设置是异步写的。我有一个活动为用户启动此屏幕,当我回来时,无论用户是打开还是关闭,我都会看到该方法返回false。但是,如果我打开设置,然后等待一段时间然后返回它似乎正确反映。我不确定谷歌试图用这个来完成什么,但它使得编码能够知道设置是否已经打开或者现在不是很困难..
注意:如果您开始自己的活动暂停设置活动,则覆盖权限将保留,如果启用则返回True。您可以使用它来编写解决方案UX。