2017-09-13 470 views
3

清单:Settings.canDrawOverlays(上下文)Android上的奥利奥返回false

<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(本)返回false,即使所以许可已经被授予。在更新Pixel到Oreo之前还没有发生过。

Android版本:8.0.0

我试图更新编译工具:对26.0.1和目标,并compileSdk到26 它有助于上最早推出:切换就可以返回true后,但下一次启动应用程序时,它会再次返回false。

+0

我也遇到过这个问题 - 请让我知道如果你找到解决方案 – Eshaan

+1

请参阅我的解决方案的问题在https://stackoverflow.com/questions/46173460/why-in-android-o-method-设置 - candrawoverlays - 回报 - 假时,用户有/ 48127195#48127195 – headuck

回答

0

所以我遇到了这个问题,我最好的猜测是,现在在android中,canDrawOverlays的设置是异步写入的。我有一个活动为用户启动此屏幕,当我回来时,我发现无论用户是打开还是关闭,该方法都会返回false。但是,如果我切换设置,然后等待一段时间,然后返回它似乎反映正确。我不确定谷歌试图完成这个,但它使编码周围能够知道设置已打开或现在不是非常困难..

注意:如果您开始自己的活动暂停设置活动,然后覆盖权限将保持不变,如果启用,将返回True。这是您可以用来编写您的变通方法UX的东西。

1

问题出在Android Oreo本身。

我安装了安全补丁后就消失了。

解决方案:安装最新的安全补丁。