Android 14 权限等级剖析

news2024/10/7 18:31:18

Android 14 权限等级剖析

Android 14 引入了新的权限等级,为应用程序访问敏感信息和功能提供了更细粒度的控制。了解这些新的权限等级及其应用场景对于开发人员至关重要。

1. 概述

Android 一直以来都使用权限机制来控制应用程序对系统资源和用户数据的访问。随着 Android 版本的更新,权限机制也在不断完善,以提高安全性并降低隐私风险。

Android 14 引入了新的权限等级,进一步细化了对应用程序权限的控制。新的权限等级可以更好地划分不同权限的风险级别,并为开发人员提供更灵活的权限管理方案。

2. 权限等级概述

Android 14 中的权限等级主要分为以下几类:

  • 普通权限(normal):风险最低的权限等级,应用程序在安装时自动获得。这类权限通常不会对用户隐私或安全造成重大风险,例如访问网络、读取手机状态等。
  • 危险权限(dangerous):可能对用户隐私或安全造成风险的权限等级,需要用户明确批准才能授予。这类权限包括读取联系人、访问位置、使用相机等。
  • 签名权限(signature):仅授予与声明权限具有相同签名的应用程序。这类权限通常用于应用程序间通信或共享数据,例如读取已知来源的存储文件。
  • 签名或系统权限(signatureOrSystem):仅授予签名应用程序或系统映像中的包。这类权限用于需要更高级别安全性的操作,例如管理设备存储。
  • 特权权限(privileged):风险最高的权限等级,仅授予特权应用程序。这类权限可以访问最敏感的系统功能,例如修改系统设置、管理用户账户。
  • 开发权限(development):可选地授予开发应用程序,用于调试和测试目的,例如调试网络连接、读取调试日志。
  • 应用操作权限(appop):与应用操作相关的特殊权限,一些操作不需要在 Manifest 中申请权限,例如显示通知、保持弱锁、激活 VPN。
  • 低于 Android 6.0 的权限(pre23):授予低于 Android 6.0 的应用程序,由于兼容性原因而保留,例如读取外部存储。
  • 安装程序权限(installer):授予安装程序应用程序,用于安装和卸载应用程序。
  • 验证程序权限(verifier):授予验证程序应用程序,用于验证应用程序签名。
  • 预装权限(preinstalled):授予预装在系统映像上的任何应用程序,用于预装应用程序所需的功能。
  • 设置向导权限(setup):授予设置向导应用程序,用于引导用户完成初始设备设置。
  • 即时应用程序权限(instant):授予即时应用程序,用于轻量级、模块化的应用程序体验。
  • 运行时权限(runtime):授予目标运行时权限的应用程序(Android 6.0 及以上),用户可以在运行时授予或拒绝权限,例如访问麦克风、录制视频。
  • OEM 权限(oem):如果其保护级别为签名,则请求应用程序驻留在 OEM 分区,并且 OEM 已将该应用程序列入白名单,以接收此权限。通常由 OEM 用于其专有功能。
  • 供应商特权权限(vendorPrivileged):授予供应商分区中的特权应用程序,用于供应商特定的硬件或功能。
  • 文本分类器权限(textClassifier):授予系统默认文本分类器,用于过滤垃圾邮件和其他有害内容。
  • 健康权限(wellbeing):授予 OEM 定义的健康应用程序,用于访问健康相关数据。
  • 文档管理器权限(documenter):授予文档管理器,用于管理文档文件。
  • 设备配置器权限(configurator):授予设备配置器,用于配置设备设置。
  • 事件报告批准者权限(incidentReportApprover):批准共享事件报告的应用程序,用于收集和分析设备使用数据。
  • 系统应用程序预测器权限(appPredictor):授予系统应用程序预测器,用于预测用户行为并提供个性化体验。

3. 每个权限等级的详细说明

普通权限(normal)

  • 应用程序在安装时自动获得权限。
  • 对其他应用程序、系统或用户的风险最小。
  • 示例:访问网络、读取手机状态。

危险权限(dangerous)

  • 需要用户明确批准。
  • 可能访问敏感数据或对设备进行控制。
  • 示例:读取联系人、访问位置、使用相机。

签名权限(signature)

  • 仅授予与声明权限具有相同签名的应用程序。
  • 通常用于应用程序间通信或共享数据。
  • 示例:读取已知来源的存储文件。

签名或系统权限(signatureOrSystem)

  • 仅授予签名应用程序或系统映像中的包。
  • 用于需要更高级别安全性的操作。
  • 示例:管理设备存储。

特权权限(privileged)

  • 仅授予特权应用程序。
  • 访问最敏感的系统功能。
  • 示例:修改系统设置、管理用户账户。

开发权限(development)

  • 可选地授予开发应用程序。
  • 用于调试和测试目的。
  • 示例:调试网络连接、读取调试日志。

应用操作权限(appop)

  • 与应用操作相关的特殊权限。
  • 一些操作不需要在 Manifest 中申请权限。
  • 示例:显示通知、保持弱锁、激活 VPN。

低于 Android 6.0 的权限(pre23)

  • 授予低于 Android 6.0 的应用程序。
  • 由于兼容性原因而保留。
  • 示例:读取外部存储。

安装程序权限(installer)

  • 授予安装程序应用程序。
  • 用于安装和卸载应用程序。

验证程序权限(verifier)

  • 授予验证程序应用程序。
  • 用于验证应用程序签名。

预装权限(preinstalled)

  • 授予预装在系统映像上的任何应用程序。
  • 用于预装应用程序所需的功能。

设置向导权限(setup)

  • 授予设置向导应用程序。
  • 用于引导用户完成初始设备设置。

即时应用程序权限(instant)

  • 授予即时应用程序。
  • 用于轻量级、模块化的应用程序体验。

运行时权限(runtime)

  • 授予目标运行时权限的应用程序(Android 6.0 及以上)。
  • 用户可以在运行时授予或拒绝权限。
  • 示例:访问麦克风、录制视频。

OEM 权限(oem)

  • 如果其保护级别为签名,则请求应用程序驻留在 OEM 分区,并且 OEM 已将该应用程序列入白名单,以接收此权限。
  • 通常由 OEM 用于其专有功能。

供应商特权权限(vendorPrivileged)

  • 授予供应商分区中的特权应用程序。
  • 用于供应商特定的硬件或功能。

文本分类器权限(textClassifier)

  • 授予系统默认文本分类器。
  • 用于过滤垃圾邮件和其他有害内容。

健康权限(wellbeing)

  • 授予 OEM 定义的健康应用程序。
  • 用于访问健康相关数据。

文档管理器权限(documenter)

  • 授予文档管理器。
  • 用于管理文档文件。

设备配置器权限(configurator)

  • 授予设备配置器。
  • 用于配置设备设置。

事件报告批准者权限(incidentReportApprover)

  • 批准共享事件报告的应用程序。
  • 用于收集和分析设备使用数据。

系统应用程序预测器权限(appPredictor)

  • 授予系统应用程序预测器。
  • 用于预测用户行为并提供个性化体验。

4. 如何在应用程序中使用权限等级

在应用程序中使用权限等级,需要遵循以下步骤:

  1. 在 Manifest 文件中声明所需的权限。

    在 Manifest 文件的 <uses-permission> 标签中声明您应用程序所需的权限。例如,要请求访问位置权限,请添加以下行:

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    
  2. 对于危险权限,需要在运行时请求用户的批准。

    对于需要用户明确批准的危险权限,您需要在运行时请求用户的同意。可以使用 ActivityCompat.requestPermissions() 方法来实现。例如:

    if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);
    } else {
        // 已经拥有权限,可以执行相关操作
    }
    
  3. 使用 ContextCompat.checkSelfPermission() 检查应用程序是否具有权限。

    可以使用 ContextCompat.checkSelfPermission() 方法检查应用程序是否具有特定的权限。例如:

if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
    // 已经拥有权限,可以执行相关操作
} else {
    // 没有权限,需要请求或提示用户
}
  1. 使用 ActivityCompat.requestPermissions() 请求用户授予权限。
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);
} else {
    // 已经拥有权限,可以执行相关操作
}
  1. onRequestPermissionsResult() 方法中处理用户的权限授予结果。
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);

    if (requestCode == 1) {
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            // 用户授予了权限,可以执行相关操作
        } else {
            // 用户拒绝了权限,可以提示用户或采取其他措施
        }
    }
}

5. 权限等级的最佳实践

  • 仅请求必要的权限。 您的应用程序应仅请求其正常运行所需的最少权限。避免请求不必要的权限,以免降低用户信任并增加隐私风险。
  • 告知用户为什么要请求权限。 当您请求权限时,请向用户解释为什么需要该权限以及您的应用程序将如何使用它。这有助于建立用户信任并提高透明度。
  • 尊重用户的隐私。 谨慎使用您获得的权限,并确保仅将用户数据用于其预期的目的。遵循数据隐私法规并保护用户数据安全。
  • 使用运行时权限功能。 对于危险权限,请使用运行时权限功能,以便用户可以在运行时授予或拒绝权限。这使他们可以更好地控制其隐私并根据需要调整权限设置。
  • 定期审查应用程序的权限使用情况。 定期审查您的应用程序使用的权限,以确保您没有请求或使用不必要的权限。

6. 总结

Android 14 引入的新权限等级提供了更细粒度的控制,可提高安全性并降低隐私风险。开发人员应了解新的权限等级并以负责任的方式使用它们。

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

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

相关文章

第三十篇——等价性:如何从等价信息里找答案?

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么&#xff1f; 四、总结五、升华 一、背景介绍 知道了等价性的逻辑&#xff0c;通过等价性去衡量事物&#xff0c;像是给…

如何验证Rust中的字符串变量在超出作用域时自动释放内存?

讲动人的故事,写懂人的代码 在公司内部的Rust培训课上,讲师贾克强比较了 Rust、Java 和 C++ 三种编程语言在变量越过作用域时自动释放堆内存的不同特性。 Rust 通过所有权系统和借用检查,实现了内存安全和自动管理,从而避免了大部分内存泄漏。Rust 自动管理标准库中数据类…

Vue3学习笔记<->开发环境安装

背景 公司开始做产品开发&#xff0c;前端就选择使用了vue&#xff0c;替换了传统的jsp。公司要求每个开发人员都要前后端都可以开发&#xff0c;于是就开始学习vue了。 安装环境 安装node.js node.js下载地址&#xff1a;node.js下载地址 安装&#xff1a;选在安装路径&…

晶方科技:台积电吃饱,封装迎春?

半导体产业链掀起涨价潮&#xff0c;先进封装迎接利好。 这里我们来聊国内先进封装企业——晶方科技。 近期&#xff0c;由于产能供不应求&#xff0c;台积电决定上调先进封装产品价格&#xff0c;还表示订单已经排到2026年。 大哥吃不下了&#xff0c;剩下的订单全都是空间。…

【golang学习之旅】复杂数据类型——指针 函数

系列文章 【golang学习之旅】使用VScode安装配置Go开发环境 【golang学习之旅】报错&#xff1a;a declared but not used 【golang学习之旅】Go 的基本数据类型 【golang学习之旅】深入理解字符串string数据类型 【golang学习之旅】go mod tidy 【golang学习之旅】记录一次 p…

【嵌入式Linux】<总览> 进程间通信(更新中)

文章目录 前言 一、管道 1. 概念 2. 匿名管道 3. 有名管道 二、内存映射区 1. 概念 2. mmap函数 3. 进程间通信&#xff08;有血缘关系&#xff09; 4. 进程间通信&#xff08;没有血缘关系&#xff09; 5. 拷贝文件 前言 在文章【嵌入式Linux】&#xff1c;总览&a…

RAID详解及配置实战

目录 一、RAID磁盘阵列及详解 1.1 了解RAID 1.1.1 简单理解 1.1.2 对比了解 1.2 RAID磁盘阵列介绍 1.3 RAID功能实现 1.4 RAID实现的方式 1.5 RAID级别详解 1.5.1 RAID -0 1.5.2 RAID -1 1.5.3 RAID -5 1.5.4 RAID -10&#xff08;RAID 10&#xff09; 1.6 阵列卡…

2024年最新通信安全员考试题库,随时在线刷题

46.劳动防护用品不同于一般的商品&#xff0c;直接涉及到劳动者的生命安全和身体健康&#xff0c;故生产经营单位为从业人员提供的劳动防护用品必须符合&#xff08; &#xff09;或行业标准。 A.地方标准 B.国家标准 C.消防标准 D.LA劳安认证 答案:B 47.矿山、金属冶炼、…

本地可以Run大模型吗?Llama3?安排!

➡️ 前言 本地可以跑大模型吗? ChatGPT发布之后&#xff0c;引起了AI领域剧烈震动&#xff0c;从2023年3月百度发布新一代大预言模型文心一言开始&#xff0c;大模型如雨后春笋般不断涌现&#xff0c;国内阿里巴巴的通义千问、华为的盘古大模型、科大讯飞的星火认知大模型、…

大学网页制作作品1

作品须知&#xff1a;1.该网页作品预计分为5个页面&#xff08;其中1个登录页面&#xff0c;1个首页主页面&#xff0c;3个分页面&#xff09;&#xff0c;如需要可自行删改增加页面。&#xff08;总共约800行html,1200行css,100行js&#xff09; 2.此网页源代码只用于学习和模…

面相对象程序设计

面相对象程序设计包含内容如下 局域网聊天程序设网页浏览器设计电子日历记事本的设计 以其中的一个的报告进行举例 1需求与总体设计 1 1.1需求分析 1 1.2总体设计方案 1 1.2&#xff0e;1系统功能分析以及功能表 1 1.3系统类图的关系以及表之间的联系 2 2详细设计 3 2.1 Manag…

Linux系统学习——指令三

Linux系统学习——指令三 Linux系统学习——指令三chmod — 文件执行权限添加文件执行权限去除文件执行权限 查找文件中特定关键字使用vi编辑文件并查找特定关键字文本文件查找特定关键字1: 使用 grep 命令2: 使用 find 命令3: 使用 awk 命令4: 使用 sed 命令5: 使用 ag 命令&a…

RS232自由转Profinet协议网关模块连接1200PLC与扫码枪通讯及手动清零案例

一、RS232和Profinet这两种通讯接口的特点和应用场景&#xff1a; RS232是一种串行通讯接口标准&#xff0c;常用于连接计算机和外部设备&#xff0c;传输速率较低但稳定可靠。Profinet则是一种工业以太网通讯协议&#xff0c;具有高速、实时性强的特点&#xff0c;适用于工业…

群智优化:探索BP神经网络的最优配置

群智优化&#xff1a;探索BP神经网络的最优配置 一、数据集介绍 鸢尾花数据集最初由Edgar Anderson测量得到&#xff0c;而后在著名的统计学家和生物学家R.A Fisher于1936年发表的文章中被引入到统计和机器学习领域数据集特征&#xff1a; 鸢尾花数据集包含了150个样本&#…

【计算机毕业设计】167校园失物招领微信小程序

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

适合实习生使用的工作笔记软件

作为一名初入职场的实习生&#xff0c;我每天都面临着海量的信息和工作任务。刚开始时&#xff0c;我常常手忙脚乱&#xff0c;生怕漏掉任何重要细节。对于实习生来说&#xff0c;好的工作笔记软件不仅能帮助我们系统地整理工作信息&#xff0c;还能提高工作效率&#xff0c;确…

数据结构---二叉树前中后序遍历

1. 某完全二叉树按层次输出&#xff08;同一层从左到右&#xff09;的序列为 ABCDEFGH 。该完全二叉树的前序序列为() A: ABDHECFG B: ABCDEFGH C: HDBEAFCG D: HDEBFGCA 2. 二叉树的先序遍历和中序遍历如下&#xff1a;先序遍历: EFHIGJK; 中序遍历: HFIEJKG. 则二叉…

最新AIGC系统源码-ChatGPT商业版系统源码,自定义ChatGPT指令Promp提示词,AI绘画系统,AI换脸、多模态识图理解文档分析

目录 一、前言 系统文档 二、系统演示 核心AI能力 系统快速体验 三、系统功能模块 3.1 AI全模型支持/插件系统 AI模型提问 文档分析 ​识图理解能力 3.2 GPts应用 3.2.1 GPTs应用 3.2.2 GPTs工作台 3.2.3 自定义创建Promp指令预设应用 3.3 AI专业绘画 3.3.1 文…

Day60 代码随想录打卡|回溯算法篇---组合

题目&#xff08;leecode T77&#xff09;&#xff1a; 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 方法&#xff1a;本题最直观的解法是使用暴力for循环遍历法&#xff0c;根据k的大小定for循环的嵌套次数&…

Java高级重点知识点-14-Set接口、HashSet底层原理讲解

文章目录 Set接口 (HashSet 、LinkedHashSet)HashSet底层原理(重点理解) Set接口 (HashSet 、LinkedHashSet) 无序不重复 HashSet集合 HashSet 是根据对象的哈希值来确定元素在集合中的存储位置&#xff0c;因此具有良好的存取和查找性能。 public class HashSetDemo {publ…