Android 13中XRecorder应用悬浮窗权限请求弹窗实现方式问询
问题描述
一款名为XRecorder的应用,在用户申请draw over apps权限时,会显示顶部带深色半透明背景的弹窗/模态框。原本以为它采用了某种遗留方案,但该应用刚完成更新。此前认为无法在Android设置应用上添加任何弹窗,请问它是否在Android 13中使用了Bubble功能?恳请知晓实现方式的人士解答,所知的其他方法均会被窗口权限拦截。
(配图:
)
解答
这并不是使用Bubble功能实现的——Bubble是Android针对对话类场景设计的悬浮交互组件,和这种顶部弹窗的实现逻辑完全不同。
实际的实现逻辑是利用了Android系统的权限页特殊豁免机制:
- 当应用需要申请
SYSTEM_ALERT_WINDOW(即draw over apps)权限时,会先跳转到系统的权限设置页(对应Intent为Settings.ACTION_MANAGE_OVERLAY_PERMISSION) - 在跳转的同时,应用通过
WindowManager创建一个类型为TYPE_APPLICATION_OVERLAY(Android 8.0及以上)的窗口,设置如下关键参数:- 窗口标记添加
FLAG_NOT_FOCUSABLE(避免抢占设置页焦点)、FLAG_LAYOUT_IN_SCREEN(全屏布局) - 窗口布局固定在顶部,背景设为深色半透明,搭配引导用户开启权限的文案
- 窗口标记添加
- 系统针对这个特定的权限设置页,会豁免持有权限申请诉求的应用的窗口绘制拦截——这是应用引导用户完成权限开启的合理场景,即使在Android 13及以上版本依然有效,不属于遗留方案。
内容的提问来源于stack exchange,提问作者Cparello
相关产品推荐
相关产品推荐

