【问题标题】:Settings.canDrawOverlays(context) returns false on Android OreoSettings.canDrawOverlays(context) 在 Android Oreo 上返回 false
【发布时间】:2023-03-29 06:17:01
【问题描述】:

清单:

<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 更新为 Oreo 之前没有发生过。

安卓版本:8.0.0

我尝试将构建工具更新为 26.0.1,并将目标和 compileSdk 更新为 26。 它在第一次启动时有所帮助:切换后它返回 true,但下次我启动应用程序时它再次返回 false。

【问题讨论】:

标签: android android-8.0-oreo


【解决方案1】:

问题出在 Android Oreo 本身。

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

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

【讨论】:

    【解决方案2】:

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

    注意:如果您开始自己的活动并暂停设置活动,则覆盖权限将保持不变,如果启用,将返回 True。这是你可以用来组成你的变通用户体验的东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-12
      • 1970-01-01
      • 2021-07-02
      • 1970-01-01
      • 2015-12-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多