网站建设与管理软件51com个人主页登陆
- 作者: 五速梦信息网
- 时间: 2026年04月20日 07:41
当前位置: 首页 > news >正文
网站建设与管理软件,51com个人主页登陆,公司网站功能模块,网络前端工程师关于作者#xff1a;CSDN内容合伙人、技术专家#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 #xff0c;擅长java后端、移动开发、商业变现、人工智能等#xff0c;希望大家多多支持。 目录 一、导读二、概览三、权限分类3.1 安装时权限3.2 运行时… 关于作者CSDN内容合伙人、技术专家 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 擅长java后端、移动开发、商业变现、人工智能等希望大家多多支持。 目录 一、导读二、概览三、权限分类3.1 安装时权限3.2 运行时权限3.3 特殊权限 四、声明应用权限4.1 将硬件声明为可选4.2 确定硬件可用性4.3 按 API 级别声明权限 五、请求应用权限5.1 请求运行时权限5.2 请求特殊权限 六、自定义权限七、限制与其他应用的交互八、 推荐阅读 一、导读
我们继续总结学习Android基础知识温故知新。
本文将概要介绍 Android 权限的工作原理包括使用权限的概要工作流、对不同类型权限的说明以及在应用中使用权限的一些最佳实践等等。
二、概览
应用权限有助于保护对以下数据和操作的访问/执行权限从而为保护用户隐私提供支持
受限数据例如系统状态和用户的联系信息受限操作例如连接到已配对的设备并录制音频
我们看下使用应用权限的工作流
三、权限分类
Android 将权限分为不同的类型包括安装时权限、运行时权限和特殊权限。每种权限类型都指明了当系统授予应用该权限后应用可以访问的受限数据范围以及应用可以执行的受限操作范围。 总的权限是非常多的具体的可以查看 权限列表 api
3.1 安装时权限
安装时权限授予应用对受限数据的受限访问权限或允许应用执行对系统或其他应用只有最低影响的受限操作。 Android 提供多个安装时权限子类型包括一般权限和签名权限。
3.2 运行时权限
运行时权限也称为危险权限此类权限授予应用对受限数据的额外访问权限或允许应用执行对系统和其他应用具有更严重影响的受限操作。 因此您需要先在应用中请求运行时权限然后才能访问受限数据或执行受限操作。
当应用请求运行时权限时系统会显示运行时权限提示。
许多运行时权限会访问用户私人数据这是一种特殊的受限数据其中包括可能比较敏感的信息。例如位置信息和联系信息就属于用户私人数据。
麦克风和摄像头可用于获取特别敏感的信息。因此该系统会帮助您说明应用获取这类信息的原因。
系统会为运行时权限分配 dangerous 保护级别。
3.3 特殊权限
特殊权限与特定的应用操作相对应。只有平台和原始设备制造商 (OEM) 可以定义特殊权限
系统会为特殊权限分配 appop 保护级别
四、声明应用权限
如果您的应用要请求应用权限您必须在应用的清单文件中声明这些权限。这些声明可帮助应用商店和用户了解您的应用可能会请求的权限组合。
请求权限的过程取决于权限类型
如果是安装时权限例如一般权限或签名权限系统会在安装您的应用时自动为其授予相应权限。如果是运行时权限或特殊权限并且您的应用安装在搭载 Android 6.0API 级别 23或更高版本的设备上则您必须自己请求运行时权限或特殊权限。
如需声明应用可能请求的权限请在应用的清单文件中添加相应的 元素。例如如果应用需要访问相机则应在 AndroidManifest.xml 中添加以下代码行
manifest …uses-permission android:nameandroid.permission.CAMERA/application ……/application
/manifest4.1 将硬件声明为可选
某些权限例如 CAMERA可让您的应用访问只有部分 Android 设备具备的硬件。如果您的应用声明了这类硬件相关权限请考虑您的应用在没有该硬件的设备上是否仍可运行。 在大多数情况下硬件是可选的因此最好在 声明中将 android:required 设置为 false从而将硬件声明为可选项如 AndroidManifest.xml 中的以下代码段所示
manifest …application…/applicationuses-feature android:nameandroid.hardware.cameraandroid:requiredfalse /
manifest注意如果您未在 uses-feature 声明中将 android:required 设置为 false则 Android 会假定您的应用必须在有该硬件的情况下才能运行。因此系统会阻止某些设备安装您的应用。4.2 确定硬件可用性
如果您将硬件声明为可选您的应用在没有该硬件的设备上也可以运行。如需检查设备是否具有特定的硬件请使用 hasSystemFeature() 方法 如以下代码段所示。如果设备不具有该硬件只需在您的应用中停用此功能即可。 // Check whether your app is running on a device that has a front-facing camera.if (getApplicationContext().getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FRONT)) {// Continue with the part of your apps workflow that requires a// front-facing camera.} else {// Gracefully degrade your app experience.}4.3 按 API 级别声明权限
如需仅针对支持运行时权限的设备即搭载 Android 6.0 [API 级别 23] 或更高版本的设备声明某项权限请添加 而非 元素。
使用这两个元素中的任意一个时您都可以设置 maxSdkVersion 属性指明搭载的 Android 版本高于指定值的设备不需要特定权限。这样您就可以消除不必要的权限同时仍为旧款设备提供兼容性。
例如您的应用可能会显示用户在使用您的应用时创建的媒体内容例如照片或视频。在这种情况下只要您的应用以 Android 10 或更高版本为目标平台 您就无需在搭载 Android 10API 级别 29或更高版本的设备上使用 READ_EXTERNAL_STORAGE 权限。不过为了与旧款设备兼容您可以声明 READ_EXTERNAL_STORAGE 权限 并将 android:maxSdkVersion 设置为 28。
五、请求应用权限
5.1 请求运行时权限
这一块相对来说也比较简单我们可以调用系统的方法也可以使用三方开源库来做。
if (ContextCompat.checkSelfPermission(CONTEXT, Manifest.permission.REQUESTED_PERMISSION) PackageManager.PERMISSION_GRANTED) {// You can use the API that requires the permission.performAction(…);
} else if (shouldShowRequestPermissionRationale(…)) {// In an educational UI, explain to the user why your app requires this// permission for a specific feature to behave as expected, and what// features are disabled if its declined. In this UI, include a// cancel or no thanks button that lets the user continue// using your app without granting the permission.showInContextUI(…);
} else {// You can directly ask for the permission.requestPermissions(CONTEXT,new String[] { Manifest.permission.REQUESTED_PERMISSION },REQUEST_CODE);
}开源的库比较多我们不做深入描述可自行学习 AndPermission RxPermissions PermissionsDispatcher easypermissions XXPermissions 等等
5.2 请求特殊权限
特殊权限旨在限制访问尤其敏感或与用户隐私没有直接关系的系统资源
一些特殊权限示例
设定精确的闹钟。在其他应用前方显示和绘图。访问所有存储数据。 声明特殊权限的应用会显示在系统设置中的特殊应用权限页面内。如需向应用授予特殊权限用户必须转到此页面设置 应用 特殊应用权限。
与运行时权限不同用户必须从系统设置中的特殊应用权限页面授予特殊权限。应用可以使用 intent 将用户转到该页面这会暂停应用并启动相应的设置页面 以便用户授予指定的特殊权限。用户返回到应用后应用可以在 onResume() 函数中检查是否已获得相应权限。
以下示例代码展示了如何请求用户授予 SCHEDULE_EXACT_ALARMS 特殊权限
val alarmManager getSystemServiceAlarmManager()!!
when {// if permission is granted, proceed with scheduling exact alarms…alarmManager.canScheduleExactAlarms() - {alarmManager.setExact(…)}else - {// ask users to grant the permission in the corresponding settings pagestartActivity(Intent(ACTION_REQUEST_SCHEDULE_EXACT_ALARM))}
}六、自定义权限
通过定义自定义权限应用可以与其他应用共享其资源和功能。
Android 是一种权限分离的操作系统其中每个应用都以不同的系统身份Linux 用户 ID 和组 ID运行。系统的各个部分也会被分隔为不同的身份。因此Linux 可以将应用同其他应用和系统隔离开来。
应用可以定义其他应用可请求的权限从而将自己的功能提供给后者。它们还可以定义能够自动提供给已使用同一证书进行签名的任何其他应用的权限。
可以在每个软件包的 AndroidManifest.xml 的 清单标记中使用 sharedUserId 属性分配相同的用户 ID。这样做以后出于安全考虑系统随后会将这两个软件包视为具有相同用户 ID 和文件权限的同一应用。 请注意为了确保安全性只有具有相同签名以及请求了相同 sharedUserId的两个应用才能够获得相同的用户 ID。
如需强制执行自己的权限您首先必须使用一个或多个 元素在您的 AndroidManifest.xml 中声明它们语法 permission android:descriptionstring resource 权限的用户可读说明此属性应设置为对字符串资源的引用。与 label 属性不同它不能是原始字符串。android:icondrawable resource 对表示权限的图标的可绘制资源的引用。android:labelstring resource 权限的用户可读名称。android:namestring 用于在代码中例如在 uses-permission 元素或应用组件的 permission 属性中引用权限的名称。android:permissionGroupstring 将此权限分配给一个组。此属性的值是该组的名称使用此应用或其他应用中的 permission-group 元素声明。如果未设置此属性则此权限不会属于某个组。android:protectionLevel[normal | dangerous | 说明权限中隐含的潜在风险并指示系统在确定是否将权限授予请求授权的应用时要遵循的流程。signature | …] /例如
manifestxmlns:androidhttp://schemas.android.com/apk/res/androidpackagecom.example.myapp permissionandroid:namecom.example.myapp.permission.DEADLY_ACTIVITYandroid:labelstring/permlab_deadlyActivityandroid:descriptionstring/permdesc_deadlyActivityandroid:permissionGroupandroid.permission-group.COST_MONEYandroid:protectionLeveldangerous /…
/manifest 注意系统不允许多个软件包声明同名权限除非所有软件包均使用同一证书进行签名。 如果软件包声明了某个权限系统不会允许用户安装其他具有相同权限名称的软件包除非这些软件包使用与第一个软件包相同的证书进行签名。 因此Google 建议为权限添加应用软件包名称作为前缀并使用反向域名方式命名。在此前缀后面加上 .permission.接着是权限所代表的功能的说明 以 SNAKE_CASE 的大写格式书写。例如 com.example.myapp.permission.ENGAGE_HYPERSPACE。 遵循此建议可以避免命名冲突并有助于清晰地标识自定义权限的所有者和意图。 每个保护级别都包含基本权限类型以及零个或多个标志。例如“dangerous” 保护级别没有标志。相反保护级别 “signature|privileged” 是 “signature” 基本权限类型和 “privileged” 标志的组合。
值含义“normal”默认值。具有较低风险的权限此类权限允许请求授权的应用访问隔离的应用级功能对其他应用、系统或用户的风险非常小。系统会自动向在安装时请求授权的应用授予此类权限无需征得用户的明确许可但用户始终可以选择在安装之前查看这些权限。“dangerous”具有较高风险的权限此类权限允许请求授权的应用访问用户私人数据或获取可对用户造成不利影响的设备控制权。由于此类权限会带来潜在风险因此系统可能不会自动向请求授权的应用授予此类权限。例如应用请求的任何危险权限都可能会向用户显示并且获得确认才会继续执行操作或者系统会采取一些其他方法来避免用户自动授予使用此类功能的权限。“signature”只有在请求授权的应用使用与声明权限的应用相同的证书进行签名时系统才会授予的权限。如果证书匹配系统会在不通知用户或征得用户明确许可的情况下自动授予权限。“knownSigner”只有在请求授权的应用使用允许使用的证书进行签名时系统才会授予的权限。如果请求者的证书已列出系统会在不通知用户或征得用户明确许可的情况下自动授予权限。“signatureOrSystem”“signature、privileged” 的旧同义词。在 API 级别 23 中已废弃。系统仅向位于 Android 系统映像的专用文件夹中的应用或使用与声明权限的应用相同的证书进行签名的应用授予的权限。不要使用此选项因为 “signature” 保护级别足以满足大多数需求无论应用安装在何处该保护级别都能正常发挥作用。“signatureOrSystem”权限适用于以下特殊情况多个供应商将应用内置到一个系统映像中并且需要明确共享特定功能因为这些功能是一起构建的。
七、限制与其他应用的交互
权限不仅仅用于请求获取系统功能的使用权。您还可以限制其他应用与您的应用组件互动的方式。 我们可以配置 activity、服务、content provider 和广播接收器来限制其他应用与您的应用互动的方式
对清单中的 标记使用 android:permission 属性以限制哪些其他应用可以启动该 Activity。系统会在 Context.startActivity() 和 Activity.startActivityForResult() 期间检查该权限。如果调用方没有所需的权限将会发生 SecurityException。对清单中的 标记使用 android:permission 属性对 标记使用 android:permission 属性对 标记使用 android:permission 属性以限制哪些其他应用可以向关联的 BroadcastReceiver 发送广播
权限
八、 推荐阅读
Java 专栏
SQL 专栏
数据结构与算法
Android学习专栏
- 上一篇: 网站建设与管理期末试卷杭州网络科技设计中心
- 下一篇: 网站建设与管理实验目的用花生棒自己做网站
相关文章
-
网站建设与管理期末试卷杭州网络科技设计中心
网站建设与管理期末试卷杭州网络科技设计中心
- 技术栈
- 2026年04月20日
-
网站建设与管理就业前景cname解析对网站影响
网站建设与管理就业前景cname解析对网站影响
- 技术栈
- 2026年04月20日
-
网站建设与管理教材wordpress迁移服务器
网站建设与管理教材wordpress迁移服务器
- 技术栈
- 2026年04月20日
-
网站建设与管理实验目的用花生棒自己做网站
网站建设与管理实验目的用花生棒自己做网站
- 技术栈
- 2026年04月20日
-
网站建设与管理试卷及答案亚马逊店铺网站建设费用
网站建设与管理试卷及答案亚马逊店铺网站建设费用
- 技术栈
- 2026年04月20日
-
网站建设与管理试题与答案怎么给网站做aap
网站建设与管理试题与答案怎么给网站做aap
- 技术栈
- 2026年04月20日
