如果应用程序是从 Play 商店下载的,覆盖屏幕选项是否默认启用

Is overlay screen option is by default enable if application is downloaded from play store

来自 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 商店上发布应用程序,那么它不会进入 if 条件,直到用户手动禁用覆盖屏幕?

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

official android documentation中,它说:

Note: If the app targets API level 23 or higher, the app user must explicitly grant this permission to the app through a permission management screen.

基于SYSTEM_ALERT_WINDOWdocumentation,此权限分类为

Protection level: signature

Note: If the app targets API level 23 or higher, the app user must explicitly grant this permission to the app through a permission management screen

对于你的问题:

I read somewhere that if application is downloaded from play store then by default overlay screen option is enable.

基于 documentation 促进签名级别权​​限的权限授予:

The system grants these app permissions at install time, but only when the app that attempts to use a permission is signed by the same certificate as the app that defines the permission.

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

我建议您保持检查状态。

是的,你是对的。 SYSTEM_ALERT_WINDOW 从 Play 商店安装应用程序时,始终授予权限。 查看 Whosebug 上已经提供的另一个答案,确认:

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

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

也看看不同的问题,其中 Toast 被识别为视图,这可能会在某些设备上导致类似的问题:

希望这个答案能消除您的一些顾虑。