提示:Android第一次开机App授权问题
文章目录
- 前言
- [一、 需求-屏蔽授权弹框-默认授权](#一、 需求-屏蔽授权弹框-默认授权)
- 二、参考资料
- 三、修改文件
- 四、实现方案
- 五、Android体系三大权限
-
- [MTK Android12 三大权限 Activity 完整对比表说明](#MTK Android12 三大权限 Activity 完整对比表说明)
- [三者底层联系(MTK Android12 统一架构)](#三者底层联系(MTK Android12 统一架构))
- 各自独立作用小结
-
- [1. PermissionsAnnouncementActivity](#1. PermissionsAnnouncementActivity)
- [2. ReviewPermissionsActivity](#2. ReviewPermissionsActivity)
- [3. GrantPermissionsActivity](#3. GrantPermissionsActivity)
- 六、思考
-
- [如何解决ReviewPermissionsActivity 批量授权弹框](#如何解决ReviewPermissionsActivity 批量授权弹框)
- 禁止批量授权会不会影响授权?
- 总结
前言
MTK平台,刷完固件第一次开机会有App请求授权问题,如何规避授权、默认授权。
最终目的:
- 默认授权,不让弹框提醒授权
- 增加、提升体验
一、 需求-屏蔽授权弹框-默认授权
实际问题如下,第一次刷完机、或者恢复出厂设置后,开机会弹出这样的授权弹框

那么第一次开机有很多流程的,不允许弹框让客户去点击的,要做的就是默认授权、去掉弹框提醒。
二、参考资料
Rk-内置应用作为系统Launcher-内置APK-拷贝文件-替换开机动画 内容里面有默认给内置应用授权
Android系统默认输入法-搜狗输入法或者谷歌拼音输入法-运行时授权
直接来说就是为了解决开机默认这个弹框:


有人会问,这三个弹框和需求弹框不一样呀? 后面给出说明,这里暂不讨论。
三、修改文件
java
frameworks/base/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java
frameworks/base/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
四、实现方案
默认授权运行时权限
路径
frameworks/base/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java
如参考资料中给出的之前解决方案,在 grantDefaultPermissions 方法中添加包名即可。

禁止权限预览
路径:frameworks/base/services/core/java/com/android/server/pm/permission/PermissionManagerService.java
在方法 isPermissionsReviewRequiredInternal 是否预览中直接返回false,不让预览权限。
此权限弹框界面-到底是什么
首先 dumpsys 一下当前ACTIVITY是啥子
java
ACTIVITY com.komect.ajlauncher/com.komect.bussness.guide.GuideActivity a534b13 pid=3586
ACTIVITY com.android.permissioncontroller/.permission.ui.ReviewPermissionsActivity 92b893 pid=3173
ACTIVITY com.android.permissioncontroller/.permission.ui.ReviewPermissionsActivity ac6cfe5 pid=3173
ACTIVITY com.android.permissioncontroller/.permission.ui.ReviewPermissionsActivity 75a8123 pid=3173
ACTIVITY com.android.permissioncontroller/.permission.ui.ReviewPermissionsActivity f097229 pid=3173
ACTIVITY com.android.permissioncontroller/.permission.ui.ReviewPermissionsActivity a0c4e6b pid=3173
查阅资料,简要说明如下:
ReviewPermissionsActivity:批量授权确认页(Android12 新 UI),App 首次启动时一次性让用户审阅并授予所有危险权限。
五、Android体系三大权限
MTK Android12 三大权限 Activity 完整对比表说明
我这里整理一张表,分别对应如上界面,这里先整体理解三大权限弹框:
通过整理先搞清楚不同弹框的实际、意义、为什么弹框,然后在针对性的解决各种弹框问题、默认授权等。
| 对比项 | ReviewPermissionsActivity | PermissionsAnnouncementActivity | GrantPermissionsActivity |
|---|---|---|---|
| 核心目的 | App 首次启动批量审阅所有危险权限、统一授权 | 系统开机 / 升级隐私权限政策公告告知 | App 运行时单个 / 逐个动态申请权限 |
| 是否实际授权 | ✅ 是,操作后直接写入权限授予状态 | ❌ 否,仅弹窗告知,不修改任何权限 | ✅ 是,逐个授予 / 拒绝单项权限 |
| 触发主体 | 系统 AMS/PMS 主动拦截 App 启动触发 | 系统开机向导 / 系统升级流程主动触发 | 应用主动调用 requestPermissions() 触发 |
| 触发时机 | 新安装 App 首次启动、清数据后首次启动、系统升级后 App 首启 | 新机恢复出厂首次开机、系统大版本 OTA 升级后首次进桌面 App 运行中用到相机 / 定位 / 麦克风等时随时触发 | |
| 作用范围 | 单个应用所有危险权限组 | 整机系统全局,对所有 App 生效 | 单个应用单个权限组 |
| 界面按钮 | 允许全部 / 拒绝全部 | 知道了 / 同意确认 | 允许 / 仅使用期间允许 / 拒绝 / 拒绝不再询问 |
| 弹窗频次 | 每个 App终身只弹 1 次(已审阅不再弹) | 整机终身只弹 1 次(开机 / 升级仅一次) | 可多次弹窗,每次缺权限就弹 |
| 是否拦截流程 | 强拦截,不操作无法进入 App 主页 | 强拦截,不确认无法进入系统桌面 | 不拦截 App 主流程,悬浮弹窗询问 |
| Android12 角色 | Android12 新增批量权限审阅 UI | 原生遗留 + 12 强化的隐私合规公告页 | 传统经典运行时权限申请 UI |
| MTK 常用定制点 | 关闭弹窗、默认全授权、豁免系统 App 不弹窗 | 直接屏蔽弹窗、修改公告文案、跳过强制确认 | 默认允许所有单项权限、屏蔽弹窗、静默授权 |
| 归属场景 | 预装 / 第三方 App 首启权限批量管控 | 系统合规、隐私政策合规弹窗 | 应用日常动态权限申请 |
三者底层联系(MTK Android12 统一架构)
- 三者都隶属于
PermissionController系统priv-app,同属于系统权限管理UI层; - 底层都依赖
PMS / PermissionManagerService权限管理服务; - 流程优先级:
PermissionsAnnouncementActivity(开机最先弹)
java
→ 进入桌面
→ 打开新 App 触发 ReviewPermissionsActivity(批量授权)
→ App 运行缺权限触发 GrantPermissionsActivity(单项授权)
各自独立作用小结
1. PermissionsAnnouncementActivity
系统全局隐私公告页,纯合规告知,不授权、不干预 App 权限,只做开机首次政策确认,是安卓隐私合规强制页面。
2. ReviewPermissionsActivity
Android12 专属App 批量权限审阅页,系统主动拦截 App 启动,一次性展示该 App 所有高危权限,用户批量同意 / 拒绝,替代旧版逐个弹的模式。
3. GrantPermissionsActivity
传统单项运行时权限弹窗,App 代码主动申请哪个权限,就弹哪个权限的确认框,是日常开发最常见的权限弹窗。
六、思考
如何解决ReviewPermissionsActivity 批量授权弹框
分了两步骤:
-
默认授权 :
frameworks/base/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java如参考资料中给出的之前解决方案,在
grantDefaultPermissions方法中添加包名 -
不让批量授权弹框显示:禁止权限批量授权预览,
frameworks/base/services/core/java/com/android/server/pm/permission/PermissionManagerService.java在方法
isPermissionsReviewRequiredInternal是否预览中直接返回false,不让预览权限禁止批量授权会不会影响授权?
其实是不会的,本身就有运行时权限动态授权 机制的。 比如新按照的第三方应用或者内置应用,你屏蔽了批量授权也会有动态申请权限的,比如:

针对源码这里暂不分析了,已经知道了弹框的ACTIVITY,源码自行查看研究下。
总结
- 搞清楚权限弹框是什么:批量授权
- MTK Android12 以后的一个机制
- 以前很少遇到,突然遇到了在这里就针对性整理一下,恰好三大弹框-权限相关的知识点联系起来了,意义很大。