java - 在后台运行时显示弹出窗口?
问题描述
我正在尝试从扩展服务的类中打开一个活动。当应用程序不在前台/未使用时,我正在执行此任务。我可以在日志中看到我的服务类使用 Intent.FLAG_ACTIVITY_NEW_TASK 标志触发了启动活动。但是活动打不开。但是,当应用程序处于前台/正在使用时服务触发相同的活动时,活动将打开。
经过几次搜索后,我发现我需要在应用设置的其他权限部分手动授予“在后台 android 中运行时显示弹出窗口”权限。
显示在其他应用程序权限 SYSTEM_ALERT_WINDOW 上仅允许访问“显示弹出窗口”。
在上图中,SYSTEM_ALERT_WINDOW 将仅授予您对“显示弹出窗口”的访问权限,如果应用程序处于前台/正在使用中,则此功能可以正常工作,但如果授予标记为红色的权限,您将可以直接从类中打开任何活动延长服务。
如何检查或要求用户授予“在后台运行时显示弹出窗口”权限?或者此权限是否受到限制?
我看到像 Whatsapp 这样的应用程序默认检查了这个。
解决方案
这是开发人员在小米设备中的常见问题,
我们目前的解决方案是将用户重定向到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 上绘制。
如果用户已授予其他两个权限,则无法验证它们:
- 在后台运行时显示弹出窗口:这意味着允许应用程序在应用程序在后台运行时绘制系统 ui,例如
services
和broadcast
- 在锁定屏幕上显示:即使屏幕像社交应用程序(whatsApp、Viber、Messnger ...)一样被锁定,此应用程序也有权运行
推荐阅读
- php - 在 WooCommerce 订单编辑页面中仅显示一个的产品运输类别
- javascript - 是否通过信令服务器强制共享冰包
- python - MNIST 数据集的负数
- facebook-graph-api - localStorage,令牌是否必须字符串?
- verilog - 行为建模在 testbench.test 中不是有效的左值
- c - 如何在 C 中分别读取标志和文件名?(基于 WC 实用程序)
- r - 在R中将数字转换为日期格式?
- firebase - 如何访问 Document Snapshot 元素?
- html - Webpack 仅显示“应用就绪”。但不显示组件。如何解决?
- eclipse - RobotFrameWork 标准库没有出现在 Eclipse 中