首页 > 解决方案 > 在后台运行时显示弹出窗口?

问题描述

我正在尝试从扩展服务的类中打开一个活动。当应用程序不在前台/未使用时,我正在执行此任务。我可以在日志中看到我的服务类使用 Intent.FLAG_ACTIVITY_NEW_TASK 标志触发了启动活动。但是活动打不开。但是,当应用程序处于前台/正在使用时服务触发相同的活动时,活动将打开。

经过几次搜索后,我发现我需要在应用设置的其他权限部分手动授予“在后台 android 中运行时显示弹出窗口”权限。

显示在其他应用程序权限 SYSTEM_ALERT_WINDOW 上仅允许访问“显示弹出窗口”。

其他权限

在上图中,SYSTEM_ALERT_WINDOW 将仅授予您对“显示弹出窗口”的访问权限,如果应用程序处于前台/正在使用中,则此功能可以正常工作,但如果授予标记为红色的权限,您将可以直接从类中打开任何活动延长服务。

如何检查或要求用户授予“在后台运行时显示弹出窗口”权限?或者此权限是否受到限制?

我看到像 Whatsapp 这样的应用程序默认检查了这个。

标签: javaandroidandroid-serviceandroid-permissions

解决方案


这是开发人员在小米设备中的常见问题,

我们目前的解决方案是将用户重定向到other permissions屏幕并让用户手动授予权限:

if ("xiaomi" == Build.MANUFACTURER.toLowerCase(Locale.ROOT)) {
    val intent = Intent("miui.intent.action.APP_PERM_EDITOR")
    intent.setClassName("com.miui.securitycenter",
            "com.miui.permcenter.permissions.PermissionsEditorActivity")
    intent.putExtra("extra_pkgname", getPackageName())
    startActivity(intent)
}

Settings.canDrawOverlays(this)只有当用户给出了显示弹出窗口时,您才能使用测试,这意味着应用程序可以在系统 ui 上绘制。

如果用户已授予其他两个权限,则无法验证它们:

  1. 在后台运行时显示弹出窗口:这意味着允许应用程序在应用程序在后台运行时绘制系统 ui,例如servicesbroadcast
  2. 在锁定屏幕上显示:即使屏幕像社交应用程序(whatsApp、Viber、Messnger ...)一样被锁定,此应用程序也有权运行

推荐阅读