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,一经查实,立即删除!

相关文章

薅羊毛app小游戏对接广告联盟开发

开发一个薅羊毛app小游戏并对接广告联盟是一个涉及多个方面的复杂过程。以下是一些关键步骤和注意事项&#xff0c;帮助你更好地理解和规划这个过程&#xff1a; 1. 明确目标与定位 目标用户群体&#xff1a;确定你的目标用户是谁&#xff0c;他们的兴趣和需求是什么。游戏类…

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

描述 给定如下表达式&#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…

二进制部署Prometheus

在监控里面Prometheus现在用的还是比较多的&#xff0c;一般我们都是在Kubernetes环境里面部署&#xff0c;然后监控咱们的容器化环境&#xff0c;今天给大家分享一些不一样的&#xff0c;使用二进制的方式在机器上直接部署&#xff0c;并且监控机器上的进程。 说到监控大家通常…

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

在上海普陀这片繁华的土地上&#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;管理员可以查明系统错误和运行时错误的根本原因。了解如何…

达索系统 PLM:引领创新的数字化解决方案

在当今竞争激烈的商业环境中&#xff0c;企业需要不断提升创新能力和运营效率&#xff0c;以应对快速变化的市场需求。产品生命周期管理&#xff08;PLM&#xff09;系统作为一种综合性的数字化解决方案&#xff0c;正逐渐成为企业实现可持续发展的关键。而达索系统的 PLM 则以…

OpenCV--图像的运算

图像的运算 代码和笔记 代码和笔记 import cv2 import numpy as np""" 图像的运算 """# 读取图片 cat1 cv2.imread(./img/cat.jpeg) cat2 cv2.imread(./img/cat.jpeg)""" 加减乘除 """ # 加法(有点杂交的感觉)…

MySQL的字符集与排序规则

在MySQL数据库中&#xff0c;字符集&#xff08;Character Set&#xff09;和排序规则&#xff08;Collation&#xff09;是两个至关重要的概念&#xff0c;它们共同决定了数据库中字符数据的存储、比较和排序方式。对于涉及多语言、国际化或特殊字符处理的应用来说&#xff0c…

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

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

大数据集群搭建基础:Hadoop完全分布式搭建学习指南!!

Hadoop完全分布式搭建学习指南 Hadoop版本&#xff1a;Hadoop2.X JDK版本&#xff1a;JDK1.8一、准备工作 设置主机名和IP 在三台CentOS 7.4机器上分别设置主机名和IP&#xff1a; node1: 192.168.14.10node2: 192.168.14.20node3: 192.168.14.30 修改主机名&#xff08;以nod…

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

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

前端从视频文件提取画面帧

extractFramesFromVideo方法提取画面帧 // 设定一个异步函数&#xff0c;输入参数为&#xff1a; // videoUrl&#xff08;需要提取画面帧的视频的URL&#xff09; // fps&#xff08;每秒帧率&#xff0c;默认为25帧&#xff09; async function extractFramesFromVideo(vide…

Linux中MySQL的相关配置及命令(Ubuntu22.04)

安装 MySQL apt install mysql-server apt install mysql-client相关配置文件 默认配置文件地址: /etc/mysql/mysql.conf.d 基础配置如下 # 基础配置 [mysqld] # # * Basic Settings # user mysql pid-file /var/run/mysqld/mysqld.pid socket /var/run/mysqld/mysqld.…

uni-app地图组件控制

uni.createMapContext(mapId,this) 创建并返回 map 上下文 mapContext 对象。在自定义组件下&#xff0c;第二个参数传入组件实例this&#xff0c;以操作组件内 <map> 组件。 注意&#xff1a;uni.createMapContext(mapId, this) app-nvue 平台 2.2.5 支持 uni.create…

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

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