2

从 Android 6 开始,我们必须在应用程序中处理覆盖屏幕,我在某处读到,如果应用程序是从 Play 商店下载的,则默认情况下覆盖屏幕选项是启用的。我只是想确认这是真的吗?或者为此,我们必须进行额外的编码。目前我正在使用以下代码为 Android 6+ 设备调用覆盖屏幕启用:

private void callOverlayScreen() {        
    if (!Settings.canDrawOverlays(this)) {          
        Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
                Uri.parse("package:" + BuildConfig.APPLICATION_ID));                
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        this.startActivity(intent);            
    }
}

目前,我的 if 条件始终为真。如果假设我在 Play Store 上发布应用程序,那么在用户手动禁用覆盖屏幕之前它不会进入状态?

我们可以在不从 Playstore 下载应用程序的情况下检查此行为吗?

4

3 回答 3

2

是的你是对的。SYSTEM_ALERT_WINDOW从 Play 商店安装应用程序时,始终会授予权限。看看 StackOverflow 上已经提供的另一个答案,它证实了这一点:

SYSTEM_ALERT_WINDOW - 如何在 Android 6.0 和 targetSdkVersion 23 上自动获得此权限

但请注意,它仅适用于 Play 商店。如果您想在三星商店或亚马逊商店中发布应用程序,那么您可能会遇到问题。

还可以查看不同的问题,在哪里Toast被识别为视图,这可能会在某些设备上导致类似的问题:

检测到屏幕覆盖会阻止 Android 权限

希望这个答案可以消除您的一些担忧。

于 2018-04-22T07:42:33.433 回答
1

官方 android 文档中,它说:

注意:如果应用针对 API 级别 23 或更高级别,应用用户必须通过权限管理屏幕明确授予应用此权限。

于 2018-04-19T07:19:14.820 回答
1

根据 的文档SYSTEM_ALERT_WINDOW此权限被归类为

Protection level: signature

注意:如果应用针对 API 级别 23 或更高级别,应用用户必须通过权限管理屏幕明确授予应用此权限

对于您的问题:

我在某处读到,如果应用程序是从 Play 商店下载的,那么默认情况下覆盖屏幕选项是启用的。

根据为签名级别权​​限提供的权限授予文档:

系统在安装时授予这些应用程序权限,但仅当尝试使用权限的应用程序由与定义权限的应用程序相同的证书签名时。

由于您的应用不会使用与系统相同的证书进行签名,因此在安装时不会向您的应用授予覆盖权限。

我建议您保持检查原样。

于 2018-04-21T06:04:36.767 回答