Android 14 权限等级剖析

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.mzph.cn/diannao/30724.shtml

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

相关文章

[动态规划位运算]表达式的期望值

描述 给定如下表达式&#xff1a; A0O1A1O2A2O3A3… OnAn 其中Ai(0<i<n)代表操作数&#xff0c;Oi(1<i<n)代表算子。有三类算子包括‘&’、‘|’和‘^’&#xff0c;这些算子拥有相同的计算优先级。每个算子Oi以及它后面相邻的操作数Ai&#xff0c;他们可能一…

JDK8和JDK17共存以及切换

1. 下载和安装 1.1下载安装JDK17 下载地址: https://www.oracle.com/cn/java/technologies/downloads/ 1.2安装jdk17 点击下一步 此处可以修改安装的目标位置,修改安装位置后,点击下一步 接下来及安装完成 注意事项 此时通过cmd命令java –version你会发现竟然出现了…

四十八、openlayers地图调色总结——锐化、模糊、浮雕滤镜,调整地图色相、饱和度、亮度

这篇是对滤镜的总结&#xff0c;方便工作中直接使用。 想要调整图层的颜色&#xff0c;有两种方法。 方法一&#xff1a; 加载图层时使用tileLoadFunction函数拿到context添加canvas滤镜效果。 this.imagery new TileLayer({source: new XYZ({url: "https://server.arc…

MeshAnything:艺术家级别的自回归3D网格生成

MeshAnything: Artist-Created Mesh Generation with Autoregressive Transformers &#x1f4dc; 文献卡 MeshAnything: Artist-Created Mesh Generation with Autoregressive Transformers作者: Yiwen Chen; Tong He; Di Huang; Weicai Ye; Sijin Chen; Jiaxiang Tang; Xin…

普陀食材配送沪鑫餐饮专业化、标准化、现代化新篇章

在上海普陀这片繁华的土地上&#xff0c;企事业单位如繁星点点&#xff0c;它们不仅推动了区域经济的飞速发展&#xff0c;更在员工福利待遇上不断追求卓越。其中&#xff0c;食材配送作为后勤管理的重要环节&#xff0c;正迎来专业化、标准化、现代化的新篇章。 提及普陀食材配…

短视频开源项目MoneyPrinterTurbo:AI副业搞起来,视频制作更轻松!

目录 引言一、MoneyPrinterTurbo简介二、MoneyPrinterTurbo的核心功能三、MoneyPrinterTurbo的未来发展四、MoneyPrinterTurbo与AI副业五、部署实践1、克隆代码2、创建虚拟环境3、安装依赖4、安装好 ImageMagick5、端口映射6、启动Web界面7、模型配置8、填写主题9、视频生成10、…

OpenSSL 生成 RSA 公钥和私钥

sudo apt-get update sudo apt-get install openssl、 生成私钥 openssl genpkey -algorithm RSA -out private.pem -pkeyopt rsa_keygen_bits:2048 提取公钥 openssl rsa -pubout -in private.pem -out public.pem cat public.pem 将文件导出就行

使用事件日志识别常见 Windows 错误

事件查看器&#xff0c;一个标准的诊断工具&#xff0c;嵌入在Windows操作系统&#xff0c;记录了所有的系统事件&#xff0c;该日志捕获有关硬件问题、软件中断和整体系统行为的详细信息。通过分析这些日志&#xff0c;管理员可以查明系统错误和运行时错误的根本原因。了解如何…

56岁张卫健前任貌突然回春大进化?自曝婚礼前夕流产

现年56岁的江欣燕于1985年以18岁之龄参加第4届新秀歌唱大赛入行&#xff0c;曾拍过多部无线经典电视剧&#xff0c;包括《娱乐插班生》、《同事三分亲》及《女人俱乐部》等。现时甚少作幕前演出的江欣燕日前在社交平台上载分享了新短片&#xff0c;当中更以Deep V上阵&#xff…

从 0 打造私有知识库 RAG Benchmark 完整实践

背景介绍 最近从 0 构建了一个大模型知识库 RAG 服务的自动化 Benchmark 评估服务&#xff0c;可以基于私有知识库对 RAG 服务进行批量自动化测试与评估。本文是对这个过程的详细记录。 本文实际构建的是医疗行业知识库&#xff0c;基于高质量的医学指南和专家共识进行构建。…

DataWorks Copilot:大模型时代数据开发的新范式

导读 DataWorks 是阿里云一站式智能化数据开发与治理平台&#xff0c;支持搭配MaxCompute/Hologres/AnalyticDB/StarRocks/EMR/CDH 等大数据引擎&#xff0c;为企业构建数据仓库、数据湖以及湖仓一体&#xff08;Lakehouse&#xff09;现代数据架构提供数据平台产品解决方案。…

推荐一款功能强大的显示器!

最近在写项目开发文档&#xff0c;经常需要几个界面来回切换&#xff0c;真的深刻感受到了一台外接显示器对一名程序员来说有多重要了&#xff0c;画功能流程图的时候嫌弃自己的笔记本屏幕不够大&#xff0c;看代码的时候又在想要是有个旋转屏就好了&#xff0c;来回切换界面的…

【JavaScript复习二】选择结构if和Switch(1)

### []( )2、单分支条件分支语句if (条件表达式) { // 条件为真时&#xff0c;做的事情 } else { // 条件为假时&#xff0c;做的事情 } ### []( )2,、多分支的 if 语句if (条件表达式1) { // 条件1为真时&#xff0c;做的事情} else if (条件表达式2) { // 条件1不满足&…

kafka学习笔记07

Kafka高可用集群搭建节点需求规划 开放端口。 Kafka高可用集群之zookeeper集群搭建环境准备 删除之前的kafka和zookeeper。 重新进行环境部署&#xff1a; 我们解压我们的zookeeper: 编辑第一个zookeeper的配置文件: 我们重复类似的操作&#xff0c;创建三个zookeeper节点: 记…

SM4 国密——加密,解密

SM4 国密的使用 前言——引用管理包SM4解密——ECB模式SM4加密——ECB模式SM4解密——CBC模式SM4加密——CBC模式SM4工具类SM4主体类SM4实体类 前言——引用管理包 引用NuGet管理包BouncyCastle.Crypto SM4解密——ECB模式 public string CiphertextParsing(string json) {tr…

【数学建模】解析几何与方程模型

文章目录 解析几何与方程模型1.几何建模思想2.Numpy在线性代数中的使用3.国赛求解3.1题目3.2 问题1求解建立模型代码求解 3.3 问题2求解 4.问题答疑Q1:什么是行列式&#xff0c;其使用场景是什么行列式的定义行列式的性质行列式的使用场景 Q2:2023B题问题一用相似三角形求解覆盖…

sql server 非sa账号配置发布订阅

如果有些源端环境&#xff0c;sa账号被禁用&#xff0c;或者有其他问题&#xff0c;那可以按以下步骤操作。 使用高权限账户登录&#xff0c;另外需要拥有源端windows用户管理员的账号和密码 表发布订阅成功的前提&#xff1a;发布的表必须有主键。 创建一个专门用于发布订阅的…

国际导师上海面授大规模敏捷LeSS认证2024年8月22-24日开班 | 报名享特大福利

课堂互动练习 学员反馈 • “LeSS课我正经听过的有3次&#xff1b;两次Bas Vodde主讲&#xff0c;一次吕毅老师主讲。第一次应该是2015年&#xff0c;这门课中体现的对组织运作和产品开发底层逻辑的洞见令我折服。后来又陆续听了两次&#xff0c;每次都有更多体会。 我试着从一…

【递归、搜索与回溯】综合练习四

综合练习四 1.单词搜索2.黄金矿工3.不同路径 III 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x1f603; 1.单词搜索 题目链接&#xff1a;79. 单词搜…

杨辉三角的快速求法

一、杨辉三角形 杨辉三角形&#xff0c;又称贾宪三角形&#xff0c;帕斯卡三角形&#xff0c;是二项式系数在三角形中的一种几何排列&#xff0c;是二项式系数在三角形中的一种几何排列&#xff0c;古称“开方作法本源图”。 杨辉三角的历史 北宋人贾宪约1050年首先使用“贾…