Hap*_*Dev 5 android android-8.0-oreo
表现:
<uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW" />
<uses-permission android:name="android.permission.ACTION_MANAGE_OVERLAY_PERMISSION" />
Run Code Online (Sandbox Code Playgroud)
代码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);
}
}
Run Code Online (Sandbox Code Playgroud)
问题:即使已经授予了权限,Settings.canDrawOverlays(this)也会返回false。在将Pixel更新为Oreo之前没有发生。
Android版本:8.0.0
我尝试将构建工具更新为:26.0.1,将target和compileSdk更新为26。它在首次启动时有所帮助:切换后返回true,但是下次启动应用程序时,它将再次返回false。
所以我遇到了这个问题,我最好的猜测是现在在 android O 中 canDrawOverlays 的设置是异步写入的。我有一个活动为用户启动此屏幕,当我回来时,我看到该方法返回 false,无论用户是否打开或关闭它。但是,如果我打开设置然后等待一段时间然后返回,它似乎会正确反映。我不确定谷歌试图用这个来完成什么,但它使得编码能够知道设置是否已打开或者现在不是很困难。
注意:如果您启动自己的活动并暂停“设置”活动,则覆盖权限将持续存在,并且如果启用,将返回 True。您可以使用它来构建解决方案用户体验。