Android 系统权限----系统默认授权

授权方式比较多根据需要进行修改:

1、安装应用时默认授权

应用安装过程中,系统会检查应用申请的各个权限情况,针对安装时权限和运行时权限分别记录。我们可以修改将运行权限也默认授予。代码如下

//frameworks/base/services/core/java/com/android/server/pm/permission/PermissionManagerService.javaprivate void restorePermissionState(@NonNull AndroidPackage pkg, boolean replace,@Nullable String packageOfInterest, @Nullable PermissionCallback callback) {... ...final String perm = bp.getName();boolean allowedSig = false;int grant = GRANT_DENIED;// Keep track of app op permissions.if (bp.isAppOp()) {mSettings.addAppOpPackage(perm, pkg.getPackageName());}
//可以根据指定包名,将所有权限都判为安装时权限,自动授权if ("com.xxxx.xxxx".equals(pkg.getPackageName())) {grant = GRANT_INSTALL;} else if (bp.isNormal()) {
//END// For all apps normal permissions are install time ones.grant = GRANT_INSTALL;} else if (bp.isRuntime()) {if (origPermissions.hasInstallPermission(bp.getName())|| upgradedActivityRecognitionPermission != null) {// Before Q we represented some runtime permissions as install permissions,// in Q we cannot do this anymore. Hence upgrade them all.grant = GRANT_UPGRADE;} else {// For modern apps keep runtime permissions unchanged.grant = GRANT_RUNTIME;}} else if (bp.isSignature()) {// For all apps signature permissions are install time ones.allowedSig = grantSignaturePermission(perm, pkg, ps, bp, origPermissions);if (allowedSig) {grant = GRANT_INSTALL;}}

2、应用已安装打开时默认授权

在打开应用时如果有动态检测授权,会弹出授权提示框,弹出框对应的就是系统的权限管理窗口,可以默认在创建窗口时就自动授权然后隐藏弹窗,不用用户感知到。

//PackageInstaller/src/com/android/packageinstaller/permission/ui/GrantPermissionsActivity.javaprivate String mCallingPackage;private int getPermissionPolicy() {DevicePolicyManager devicePolicyManager = getSystemService(DevicePolicyManager.class);
//默认返回 PERMISSION_POLICY_AUTO_GRANT Activity oncreate过程检测时会自动授权并退出弹框界面,不让用户感知到return DevicePolicyManager.PERMISSION_POLICY_AUTO_GRANT;}@Overridepublic void onCreate(Bundle icicle) {

3、系统app 预置编译时授权

在预置的 Android.bp 文件中增加权限xml编译,注意 prebuilt_etc 中 name 格式

prebuilt_etc {name:privapp_allowlist_com.example.myvoicecontrol",sub_dir: "permissions",src: "com.example.myvoicecontrol.xml",filename_from_src: true,
}
android_app {...required: ["privapp_allowlist_com.example.myvoicecontrol"],...
}

对应的 com.example.myvoicecontrol.xml 中填写需要的权限

<?xml version="1.0" encoding="utf-8"?>
<permissions><privapp-permissions package="com.android.car.voicecontrol"><permission name="android.permission.MEDIA_CONTENT_CONTROL"/></privapp-permissions>
</permissions>

 这样编译出来的应用就有了对应权限,而且不能被用户手动修改

4、系统 app 预置系统中默认授权

开机第一次时系统加载部分模块时默认会授权部分权限

//frameworks/base/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.javaprivate void grantDefaultSystemHandlerPermissions(PackageManagerWrapper pm, int userId) {Log.i(TAG, "Granting permissions to default platform handlers for user " + userId);
... ...
//以系统SMS为例,根据短信包名进行设置权限// SMSif (smsAppPackageNames == null) {String smsPackage = getDefaultSystemHandlerActivityPackageForCategory(pm,Intent.CATEGORY_APP_MESSAGING, userId);grantDefaultPermissionsToDefaultSystemSmsApp(pm, smsPackage, userId);} else {for (String smsPackage : smsAppPackageNames) {grantDefaultPermissionsToDefaultSystemSmsApp(pm, smsPackage, userId);}}... ...

注意:针对MSM Dialer等必备功能应用,都有个提供用户选择的弹框设置默认应用,例如默认短信、默认电话应用等。此类应用在安装完成后,会执行 PermissionController 模块的 onAddRoleHolder 相关流程,设置为系统默认应用。应用为系统默认应用时,系统也会提供给他此类应用的基础权限,比如短信应用,会授予它短信类基础权限。

    @WorkerThreadprivate boolean addRoleHolderInternal(@NonNull Role role, @NonNull String packageName,boolean dontKillApp, boolean overrideUserSetAndFixedPermissions, boolean added) {
//这里会默认授予设置各类默认应用的基础相关权限role.grant(packageName, dontKillApp, overrideUserSetAndFixedPermissions, this);String roleName = role.getName();if (!added) {added = mRoleManager.addRoleHolderFromController(roleName, packageName);}if (!added) {Log.e(LOG_TAG, "Failed to add role holder in RoleManager, package: " + packageName+ ", role: " + roleName);}return added;}

所以对短信等各类系统默认应用来说,开机时候实际执行两遍权限授予。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/51060.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

助力樱桃智能自动化采摘,基于嵌入式端超轻量级模型LeYOLO全系列【n/s/m/l】参数模型开发构建果园种植采摘场景下樱桃成熟度智能检测识别系统

随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;技术已经渗透到我们生活的方方面面&#xff0c;从智能家居到自动驾驶&#xff0c;再到医疗健康&#xff0c;其影响力无处不在。然而&#xff0c;当我们把目光转向中国的农业领域时&#xff0c;一个令人惊讶的…

跟《经济学人》学英文:2024年07月20日这期 A short history of AI

A short history of AI In the first of six weekly briefs, we ask how AI overcame decades of underdelivering 原文&#xff1a; Over the summer of 1956 a small but illustrious group gathered at Dartmouth College in New Hampshire; it included Claude Shannon,…

leetcode 1937. 扣分后的最大得分「动态规划」「拆项」

1937. 扣分后的最大得分 题目描述&#xff1a; 给你一个n*m的整数矩阵ar&#xff0c;一开始你的得分为0&#xff0c;你想最大化从矩阵中得到的分数 你的得分方式为&#xff1a;每一行 中选取一个格子&#xff0c;选中坐标为 (r, c) 的格子会给你的总得分 增加 points[r][c] …

五、Spring Boot - 上手篇(1)

&#x1f33b;&#x1f33b;目录 一、快速入门&#xff1a;创建第一个SpringBoot 工程1.1 点击File--->New--->Project...1.2 选择版本和依赖的相关骨架包1.3 设置项目保存目录1.4 项目创建完成&#xff0c;工程主界面如下1.5 项目说明1.6 启动项目1.7 编写 HelloControl…

IDEA Maven使用HTTP代理,解决Could not transfer artifact org.xxx问题

文章目录 一、前言二、遇到问题三、分析问题四、HTTP代理五、重新编译验证 一、前言 遇到这个问题&#xff0c;有两种解决办法 IDEA Maven使用HTTP代理&#xff0c;解决Could not transfer artifact org.xxx问题IDEA Maven使用国内镜像&#xff0c;解决Could not transfer arti…

【智能数据分析平台】开发文档

目录 项目介绍需求分析系统架构图技术选型项目开发智能数据分析Excel模板生成图表管理系统优化如何提高模型回答的准确性如何校验上传文件的安全性如何防止接口被恶意盗刷如何节省数据存储空间如何提高处理的速度如果要分析的数据超过了AI模型的输入限制面经仓库项目介绍 用户上…

git,exe-损坏的映像 mingw64\binvlibpcre2-8-0.dll 没有被指定在 Windows 上运行,或者它包含错误。

问题: git,exe-损坏的映像 D:install 2022\zero\programmingigitGit\mingw64\binvlibpcre2-8-0.dl没有被指定在 Windows 上运行&#xff0c;或者它包含错误。请尝试使用原始安装介质重新安装程序&#xff0c;或联系你的系统管理员或软件供应商以获取支持&#xff0c;错误状态0…

【PHP】ThinkPHP基础

官方手册&#xff1a;ghttps://doc.thinkphp.cn/v8_0/setup.html ghttps://doc.thinkphp.cn/v8_0/setup.html 一、部署ThinkPHP 1.安装composer composer是 PHP 的一个依赖管理工具,类似于python中的pip。 下载地址&#xff1a; https://getcomposer.org/Composer-Setup.…

低功耗单声道音频编解码器ES8311中文规格书介绍

特征 具有ADC和DAC的低功耗单声道音频编解码器ES8311。 ES8311 QFN20封装的外形和丝印 系统 • 高性能、低功耗多位 delta-sigma 音频 ADC 和 DAC • I2S/PCM 主站或从站串行数据端口 • 256/384Fs、USB 12/24 MHz 和其他非标准音频系统时钟 • I2C 接口 模数转换器 • 24…

网络安全自学从入门到精通的制胜攻略!!!

在信息时代&#xff0c;网络安全已成为至关重要的领域。越来越多的人希望通过自学掌握这门技术&#xff0c;开启充满挑战与机遇的职业道路。以下是一份精心为您打造的网络安全自学攻略&#xff0c;助您在自学之旅中乘风破浪。 一、明确目标与兴趣方向 网络安全涵盖众多领域&am…

01、爬虫学习入门

爬虫&#xff1a;通过编写程序&#xff0c;来获取获取互联网上的资源 需求&#xff1a;用程序模拟浏览器&#xff0c;输入一个网址&#xff0c;从该网址获取到资源或内容 一、入门程序 #使用urlopen来进行爬取 from urllib.request import urlopen url "http://www.ba…

AI如何助力UI设计师互联网学习?

嘿&#xff0c;咱 UI 设计师想用互联网学习&#xff0c;可真不容易&#xff01;资料筛选难&#xff0c;学习资源杂&#xff0c;真让人头疼。不过还好有 AI 工具能帮忙&#xff0c;提效率&#xff01; 这一年多来&#xff0c;我在 ai123.cn 这个平台上&#xff0c;可算是找到了…

牛客NC313 | 两个数组的交集

描述 给定两个整数数组分别为&#x1d45b;&#x1d462;&#x1d45a;&#x1d460;1nums1, &#x1d45b;&#x1d462;&#x1d45a;&#x1d460;2nums2&#xff0c;找到它们的公共元素并按返回。 数据范围&#xff1a; 1≤&#x1d45b;&#x1d462;&#x1d45a;&…

20240724----安装git和配置git的环境变量/如何用命令git项目到本地idea

备注参考博客&#xff1a; 1&#xff09;可以参考博客&#xff0c;用git把项目git到本地 2&#xff09;可以参考博客vcs没有git 3)git版本更新&#xff0c;覆盖安装 &#xff08;一&#xff09;安装git &#xff08;1&#xff09;官网下载的链接 https://git-scm.com/downlo…

reshape函数介绍及应用

reshape 函数在 MATLAB 中是一个非常有用的函数&#xff0c;通过重新排列现有元素来重构数组。它允许你重新调整数组&#xff08;或矩阵&#xff09;的尺寸&#xff0c;而不改变其数据。这个函数特别适用于当你需要将一个矩阵或数组从一种结构转换为另一种结构时&#xff0c;只…

二阶段测试:

二阶段测试&#xff1a; 架构&#xff1a; 服务器类型部署组件ip地址DR1调度服务器 主&#xff08;ha01&#xff09;KeepalivedLVS-DR192.168.60.30DR2调度服务器 备 (ha02)KeepalivedLVS-DR192.168.60.40web1节点服务器 (slave01)NginxTomcatMySQL 备MHA managerMHA node192.…

Unity横板动作游戏 -项目准备

项目准备 这是一篇 Unity 2022 最新稳定版本的教程同步笔记&#xff0c;本文将会讲解一些开始学习必须的条件。 安装环境 首先是安装 UnityHub&#xff0c;然后在 UnityHub 中安装 Unity 的版本(2022)。 只需要安装 开发者工具 和文档即可&#xff0c;导出到其他平台的工具等…

大厂面试官问我:ConcurrentHashMap底层原理?【后端八股文十五:Java集合合集】

本文为【Java集合 合集】初版&#xff0c;后续还会进行优化更新&#xff0c;欢迎大家关注交流~ hello hello~ &#xff0c;这里是绝命Coding——老白~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#…

Scrapy 爬取旅游景点相关数据(四)

本节内容主要为&#xff1a; &#xff08;1&#xff09;创建数据库 &#xff08;2&#xff09;创建数据库表 &#xff08;3&#xff09;爬取数据进MYSQL库 1 新建数据库 使用MYSQL数据库存储数据&#xff0c;创建一个新的数据库 create database scrapy_demo;2 新建数据表 CR…

前端JS特效第57波:响应式博客网站图文幻灯片

响应式博客网站图文幻灯片&#xff0c;先来看看效果&#xff1a; 部分核心的代码如下&#xff1a; <!DOCTYPE html> <html lang"zh-CN"><head> <meta charset"utf-8"> <title>响应式博客幻灯片演示</title><link …