1. 项目背景与核心问题
在Android 8.0(API级别26)之后,Google对系统权限管理进行了重大调整,其中"显示在其他应用上层"(SYSTEM_ALERT_WINDOW)和"安装未知应用"(REQUEST_INSTALL_PACKAGES)这两个特殊权限的管理方式发生了根本性变化。这两个权限直接关系到应用的核心功能实现和用户体验:
- SYSTEM_ALERT_WINDOW:允许应用在其他应用上方绘制悬浮窗,常见于录屏软件、悬浮球工具、聊天头(Chat Heads)等场景
- REQUEST_INSTALL_PACKAGES:允许应用安装其他APK文件,常见于应用商店、OTA更新等场景
在Android 16(假设为未来版本)中,这两个权限的默认授权行为可能进一步收紧。作为开发者,我们需要理解这些变化对应用功能的影响,并找到合规的解决方案。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 权限机制深度解析
2.1 SYSTEM_ALERT_WINDOW权限的演变
从Android 6.0到Android 12,悬浮窗权限的管理经历了三个阶段:
- Android 6.0-7.1:只需在Manifest声明即可使用
- Android 8.0-10:需要动态请求并引导用户到设置页面手动开启
- Android 11+:引入更严格的授权流程,包括:
- 必须使用ACTION_MANAGE_OVERLAY_PERMISSION意图
- 新增canDrawOverlays()方法检查当前状态
- 授权对话框会明确显示"允许显示在其他应用上层"
java复制// 检查悬浮窗权限的典型代码
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (!Settings.canDrawOverlays(this)) {
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + getPackageName()));
startActivityForRes
