鸿蒙HarmonyOS开发:应用权限的基本概念及如何申请应用权限详细介绍

news2024/11/23 14:21:40

文章目录

      • 一、访问控制
      • 二、应用权限
        • 1、应用权限管控
        • 2、权限使用的基本原则
        • 3、授权方式
        • 4、权限等级
      • 三、申请应用权限
        • 1、选择申请权限的方式
        • 2、声明权限
        • 3、声明样例
        • 4、二次向用户申请授权
        • 5、具体实现示例
        • 6、效果展示
      • 四、应用权限列表
        • 1、system_grant(系统授权)
        • 2、user_grant(用户授权)
        • 3、应用权限组列表

一、访问控制

默认情况下,应用只能访问有限的系统资源。但某些情况下,应用存在扩展功能的诉求,需要访问额外的系统数据(包括用户个人数据)和功能,系统也必须以明确的方式对外提供接口来共享其数据或功能。

系统通过访问控制的机制,来避免数据或功能被不当或恶意使用。当前访问控制的机制涉及多方面,包括应用沙箱、应用权限、系统控件等方案。

二、应用权限

系统根据应用的APL等级设置进程域和数据域标签,并通过访问控制机制限制应用可访问的数据范围,从而实现在机制上消减应用数据泄露的风险。

不同APL等级的应用能够申请的权限等级不同,且不同的系统资源(如:通讯录等)或系统能力(如:访问摄像头、麦克风等)受不同的应用权限保护。通过严格的分层权限保护,有效抵御恶意攻击,确保系统安全可靠。

1、应用权限管控

系统提供了一种允许应用访问系统资源(如:通讯录等)和系统能力(如:访问摄像头、麦克风等)的通用权限访问方式,来保护系统数据(包括用户个人数据)或功能,避免它们被不当或恶意使用。

应用权限保护的对象可以分为数据和功能:

数据包括个人数据(如照片、通讯录、日历、位置等)、设备数据(如设备标识、相机、麦克风等)。

功能包括设备功能(如访问摄像头/麦克风、打电话、联网等)、应用功能(如弹出悬浮窗、创建快捷方式等)。

2、权限使用的基本原则

合理的使用场景有助于应用权限申请和使用。开发应用时权限申请需要满足如下原则:

  • 应用(包括应用引用的三方库)所需权限必须在应用的配置文件中严格按照权限开发指导逐个声明。

  • 权限申请满足最小化原则,禁止申请非必要的、已废弃的权限。应用申请过多权限,会引起用户对应用安全性的担忧以及使用体验变差,从而也会影响到应用的安装率和留存率。

  • 应用申请敏感权限时,必须填写权限使用理由字段,敏感权限通常是指与用户隐私密切相关的权限,包括地理位置、相机、麦克风、日历、健身运动、身体传感器、音乐、文件、图片视频等权限。

  • 应用敏感权限须在对应业务功能执行前动态申请,满足隐私最小化要求。

  • 用户拒绝授予某个权限后,应用与此权限无关的其他业务功能应允许正常使用。

3、授权方式

根据授权方式的不同,权限类型可分为system_grant(系统授权)和user_grant(用户授权)。

  • system_grant(系统授权)

system_grant指的是系统授权类型,在该类型的权限许可下,应用被允许访问的数据不会涉及到用户或设备的敏感信息,应用被允许执行的操作对系统或者其他应用产生的影响可控。

如果在应用中申请了system_grant权限,那么系统会在用户安装应用时,自动把相应权限授予给应用。

  • user_grant(用户授权)

user_grant指的是用户授权类型,在该类型的权限许可下,应用被允许访问的数据将会涉及到用户或设备的敏感信息,应用被允许执行的操作可能对系统或者其他应用产生严重的影响。

该类型权限不仅需要在安装包中申请权限,还需要在应用动态运行时,通过发送弹窗的方式请求用户授权。在用户手动允许授权后,应用才会真正获取相应权限,从而成功访问操作目标对象。

4、权限等级

为了防止应用过度索取和滥用权限,系统基于APL(Ability Privilege Level,元能力权限等级)等级,配置了不同的权限开放范围。

元能力权限等级APL指的是应用的权限申请优先级的定义,不同APL等级的应用能够申请的权限等级不同。

级别说明开放范围
normal允许应用访问超出默认规则外的普通系统资源,如配置Wi-Fi信息、调用相机拍摄等。这些系统资源的开放(包括数据和功能)对用户隐私以及其他应用带来的风险低。都能用
system_basic允许应用访问操作系统基础服务(系统提供或者预置的基础功能)相关的资源,如系统设置、身份认证等。这些系统资源的开放对用户隐私以及其他应用带来的风险较高。要签名证书
system_core涉及开放操作系统核心资源的访问操作。这部分系统资源是系统最核心的底层服务,如果遭受破坏,操作系统将无法正常运行。不开放

三、申请应用权限

1、选择申请权限的方式

应用在访问数据或者执行操作时,需要评估该行为是否需要应用具备相关的权限。如果确认需要目标权限,则需要在应用安装包中申请目标权限。

每一个权限的权限等级、授权方式不同,申请权限的方式也不同,开发者在申请权限前,需要先根据以下流程判断应用能否申请目标权限。

在这里插入图片描述

  • system_grant(系统授权)

如果目标权限是system_grant类型,开发者在进行权限申请后,系统会在安装应用时自动为其进行权限预授予,开发者不需要做其他操作即可使用权限。

  • user_grant(用户授权)

在应用需要获取user_grant权限时,请完成以下步骤:

1、在配置文件中,声明应用需要请求的权限。

2、将应用中需要申请权限的目标对象与对应目标权限进行关联,让用户明确地知道,哪些操作需要用户向应用授予指定的权限。

3、运行应用时,在用户触发访问操作目标对象时应该调用接口,精准触发动态授权弹框。该接口的内部会检查当前用户是否已经授权应用所需的权限,如果当前用户尚未授予应用所需的权限,该接口会拉起动态授权弹框,向用户请求授权。

4、检查用户的授权结果,确认用户已授权才可以进行下一步操作。

2、声明权限

应用在申请权限时,需要在项目的配置文件中,逐个声明需要的权限,否则应用将无法获取授权。

应用需要在module.json5配置文件的requestPermissions标签中声明权限。

属性含义数据类型是否必填取值范围
name需要使用的权限名称。字符串必填需为系统已定义的权限,取值范围请参考应用权限列表。
reason申请权限的原因。字符串选填该字段用于应用上架校验,当申请的权限为user_grant权限时必填,并且需要进行多语种适配。使用string类资源引用。格式为$string: ***。
usedScene权限使用的场景。包括abilities和when两个子项。
-abilities:使用权限的UIAbility或者ExtensionAbility组件的名称。
- when:调用时机。
对象必填当申请的权限为user_grant权限时建议填写。
3、声明样例

// module.json5

{
  "module" : {
    "requestPermissions":[
      // 网络请求
      {
        "name": "ohos.permission.INTERNET"
      },
      // 相机
      {
        "name": "ohos.permission.CAMERA",
        "reason": '$string:permission_reason_camera',
        "usedScene": {}
      },
    ]
  }
}
4、二次向用户申请授权

当应用通过requestPermissionsFromUser()拉起弹框请求用户授权时,用户拒绝授权。应用将无法再次通过requestPermissionsFromUser拉起弹框,需要用户在系统应用“设置”的界面中,手动授予权限。

在“设置”应用中的路径:

路径一:设置 > 隐私和安全 > 权限类型(如麦克风) > 具体应用
路径二:设置 > 应用和元服务 > 某个应用

应用也可以通过调用requestPermissionOnSetting(),直接拉起权限设置弹框,引导用户授予权限。

5、具体实现示例

以申请使用麦克风权限为例进行说明。

在UI中向用户申请授权。

调用requestPermissionsFromUser()方法后,应用程序将等待用户授权的结果。如果用户授权,则可以继续访问目标操作。如果用户拒绝授权,则需要提示用户必须授权才能访问当前页面的功能,并引导用户到系统应用“设置”中打开相应的权限。

应用也可以通过调用requestPermissionOnSetting(),直接拉起权限设置弹框,引导用户授予权限。

import { abilityAccessCtrl, common, Permissions, bundleManager } from '@kit.AbilityKit'
import { promptAction } from '@kit.ArkUI';

const context = getContext(this) as common.UIAbilityContext;

@Entry
@Component
struct PermissionPage {
  // 打开系统设置的权限管理页
  openPermissionSettingsPage() {
    const BundleFlag = bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION
    // 获取 bundle 包信息
    const bundleInfo = bundleManager.getBundleInfoForSelfSync(BundleFlag)
    // 通过 startAbility 打开 系统设置 页
    context.startAbility({
      bundleName: 'com.huawei.hmos.settings', // 固定写法CV:设置页的包名
      abilityName: 'com.huawei.hmos.settings.MainAbility', // 固定写法CV:设置页的 ability 名
      uri: 'application_info_entry', // 固定写法CV:打开 设置->应用和元服务
      parameters: {
        // 应用包名可通过 bundleManager 动态获取
        pushParams: bundleInfo.name
      }
    })
  }

  // 申请麦克风授权
  async requestMicrophone() {
    const permissions: Array<Permissions> = ['ohos.permission.MICROPHONE'];
    // 1. 创建应用权限管理器
    const atManager = abilityAccessCtrl.createAtManager()
    // 2. 向用户申请 user_grant 权限(温馨提示:首次申请时会弹窗,后续申请则不会再出现弹窗)
    const requestResult = await atManager.requestPermissionsFromUser(
      context, // 应用上下文
      permissions   // 参数:权限列表(数组)zou
    )
    const isAuth = requestResult.authResults.every(item => item === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED)
    // 如果点击拒绝,则弹窗引导去设置页开启
    if (!isAuth) {
      promptAction.showDialog({
        alignment: DialogAlignment.Center,
        title: '温馨提示',
        message: "开启后才能录制加密视频和音频",
        buttons: [
          { text: '取消', color: '#89939c' },
          { text: '去设置', color: '#0a59f7' },
        ]
      })
        .then((res) => {
          // 用户点击了去设置
          if (res.index === 1) {
            // 通过代码打开当前应用的设置页
            this.openPermissionSettingsPage()
          }
        })
    }
  }

  build() {
    Column() {
      Button('申请麦克风授权')
        .onClick(() => {
          this.requestMicrophone()
        })
    }.padding(20)
    .height('100%')
    .width('100%')
  }
}
6、效果展示

在这里插入图片描述

如果用户拒绝授权,通过调用requestPermissionOnSetting(),直接拉起权限设置弹框,引导用户授予权限。

在这里插入图片描述

四、应用权限列表

1、system_grant(系统授权)

更多请参见官网《对所有应用开放》

ohos.permission.USE_BLUETOOTH
允许应用查看蓝牙的配置。

ohos.permission.GET_BUNDLE_INFO
允许查询应用的基本信息。

ohos.permission.PREPARE_APP_TERMINATE
允许应用关闭前执行自定义的预关闭动作。

ohos.permission.PRINT
允许应用获取打印框架的能力。

ohos.permission.DISCOVER_BLUETOOTH
允许应用配置本地蓝牙,查找远端设备且与之配对连接。

ohos.permission.ACCELEROMETER
允许应用读取加速度传感器的数据。

ohos.permission.ACCESS_BIOMETRIC
允许应用使用生物特征识别能力进行身份认证。

ohos.permission.ACCESS_NOTIFICATION_POLICY
在本设备上允许应用访问通知策略。
仅当控制铃声从静音到非静音时,需要申请该权限。

ohos.permission.GET_NETWORK_INFO
允许应用获取数据网络信息。

ohos.permission.GET_WIFI_INFO
允许应用获取Wi-Fi信息。

ohos.permission.GYROSCOPE
允许应用读取陀螺仪传感器的数据。

ohos.permission.INTERNET
允许使用Internet网络。

ohos.permission.KEEP_BACKGROUND_RUNNING
允许Service Ability在后台持续运行。

ohos.permission.NFC_CARD_EMULATION
允许应用实现卡模拟功能。

ohos.permission.NFC_TAG
允许应用读写Tag卡片。

ohos.permission.PRIVACY_WINDOW
允许应用将窗口设置为隐私窗口,禁止截屏录屏

ohos.permission.PUBLISH_AGENT_REMINDER
允许该应用使用后台代理提醒。

ohos.permission.SET_WIFI_INFO
允许应用配置Wi-Fi设备。

ohos.permission.VIBRATE
允许应用控制马达振动。

ohos.permission.CAMERA
允许应用使用相机。

更多请参见官网《对所有应用开放》

2、user_grant(用户授权)

更多请参见官网《受限开放权限》

ohos.permission.READ_AUDIO
允许读取用户公共目录的音频文件。

ohos.permission.WRITE_AUDIO
允许修改用户公共目录的音频文件。

ohos.permission.READ_IMAGEVIDEO
允许读取用户公共目录的图片或视频文件。

ohos.permission.WRITE_IMAGEVIDEO
允许修改用户公共目录的图片或视频文件。

ohos.permission.SHORT_TERM_WRITE_IMAGEVIDEO
允许应用保存图片、视频到用户公共目录。应用获取此权限后,最长可获得30分钟的短时授权,来保存图片/视频。

ohos.permission.READ_CONTACTS
允许应用读取联系人数据。

ohos.permission.WRITE_CONTACTS
允许应用添加、移除或更改联系人数据。

ohos.permission.SYSTEM_FLOAT_WINDOW
允许应用使用全局悬浮窗的能力。

ohos.permission.READ_PASTEBOARD
允许应用读取剪贴板。

更多请参见官网《受限开放权限》

3、应用权限组列表
  • 在申请目标权限前,建议开发者先阅读应用权限管控概述-权限组和子权限,了解相关概念,再合理申请对应的权限组。

  • 当应用请求权限时,同一个权限组的权限将会在一个弹窗内一起请求用户授权,用户同意授权后,权限组内权限将被统一授权。地理位置、通讯录、通话记录、电话、信息、日历权限组除外。

  • 当前系统支持的权限组如下所示,各子权限的含义请查阅应用权限列表。

更多请参见官网《应用权限组列表》

位置
ohos.permission.LOCATION_IN_BACKGROUND
ohos.permission.LOCATION
ohos.permission.APPROXIMATELY_LOCATION

相机
ohos.permission.CAMERA

麦克风
ohos.permission.MICROPHONE

通讯录
ohos.permission.READ_CONTACTS
ohos.permission.WRITE_CONTACTS

日历
ohos.permission.READ_CALENDAR
ohos.permission.WRITE_CALENDAR

图片和视频
ohos.permission.WRITE_IMAGEVIDEO
ohos.permission.READ_IMAGEVIDEO
ohos.permission.MEDIA_LOCATION

音乐和音频
ohos.permission.WRITE_AUDIO
ohos.permission.READ_AUDIO

文件夹
ohos.permission.READ_WRITE_DOWNLOAD_DIRECTORY
ohos.permission.READ_WRITE_DOCUMENTS_DIRECTORY

更多请参见官网《应用权限组列表》

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

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

相关文章

基于FPGA的以太网设计(二)

一.以太网硬件架构概述 前文讲述了以太网的一些相关知识&#xff0c;本文将详细讲解以太网的硬件架构 以太网的电路架构一般由MAC、PHY、变压器、RJ45和传输介质组成&#xff0c;示意图如下所示&#xff1a; PHY&#xff1a;Physical Layer&#xff0c;即物理层。物理层定义了…

三、异步加载场景

一、加载场景实现 1、加载进度条方法 在加载场景这个预制体面板上挂在一个代码 LoadingWnd 先对组件进行声明包括&#xff08;一个进度条上的文字、提示组件&#xff08;进度条位置&#xff09;、进度点、进度百分比&#xff09; 使用进度条&#xff0c;首先要初始化一下&am…

使用Docker搭建WAF-开源Web防火墙VeryNginx

1、说明 VeryNginx 基于 lua_nginx_module(openrestry) 开发,实现了防火墙、访问统计和其他的一些功能。 集成在 Nginx 中运行,扩展了 Nginx 本身的功能,并提供了友好的 Web 交互界面。 文章目录 1、说明1.1、基本概述1.2、主要功能1.3、应用场景2、拉取镜像3、配置文件4、…

SVM及其实践2 --- 对典型数据集的多分类实践

说明 本文为SVM系列的第二篇文章&#xff0c;主要是基于SVM对两份公开数据集的分类实践。建议读者在阅读本文前先看看本系列的第一篇博文[1]: SVM及其实践1 --- 概念、理论以及二分类实践-CSDN博客 Blog 2024.10.6 本文第一次撰写 目录 说明 目录 一、Iris数据集以及基于S…

Qt-链接数据库可视化操作

1. 概述 Qt 能够支持对常见数据库的操作&#xff0c;例如&#xff1a; MySQL、Oracle、SqlServer 等等。 Qt SQL模块中的API分为三层&#xff1a;驱动层、SQL接口层、用户接口层。 驱动层为数据库和SQL接口层之间提供了底层的桥梁。 SQL接口层提供了对数据库的访问&#xff0…

【源码+文档+调试讲解】基于安卓的小餐桌管理系统springboot框架

摘 要 相比于以前的传统手工管理方式&#xff0c;智能化的管理方式可以大幅降低运营人员成本&#xff0c;实现了小餐桌的标准化、制度化、程序化的管理&#xff0c;有效地防止了小餐桌的随意管理&#xff0c;提高了信息的处理速度和精确度&#xff0c;能够及时、准确地查询和修…

vue+ElementUI—实现基础后台管理布局(sideBar+header+appMain)(附源码)

后台管理的模板很多&#xff0c;vue本身就提供了完整的vue-template-admin&#xff0c;vue-admin-beautiful等后台管理系统化框架&#xff0c;但是这些框架正是因为成体系而显得繁重。假如你想搭建一个静态的后台管理模板页面和几个单独的菜单页面&#xff0c;直接就上框架是否…

学习 PostgreSQL + Spring Boot 3 +mybatisplus整合过程中的报错记录

今天计划学习 PostgreSQL&#xff0c;并顺便尝试使用 Spring Boot 3.x 框架&#xff0c;打算整合 Spring Boot 3、PostgreSQL 和 MyBatis-Plus。整合后一直出现以下报错&#xff1a; 去AI上面搜了讲的是sqlSessionFactory 或 sqlSessionTemplate 没有正确配置 初始分析&#…

MySQL-01.课程介绍

一.什么是数据库 二.数据库产品 三.课程安排

Python_函数式编程核心(高阶函数、闭包等)

函数式编程(functional programming)其实是个很古老的概念&#xff0c;诞生距今快60年啦&#xff01;最古老的函数式编程语言Lisp新出现的函数式编程语言&#xff1a;比如Erlang、Scala、clojure等热门语言&#xff1a;Python、java、JavaScript、C等都增加了函数式编程的一些特…

SpringBoot购物推荐网站开发:架构设计与技术实现

3系统分析 3.1可行性分析 通过对本东大每日推购物推荐网站实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本东大每日推购物推荐网站采用JAVA作为开发语言&…

SpringBoot框架下购物推荐系统的架构与实现

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常适…

VSCode搭建C/C++开发环境【Windows】

VSCode搭建C/C开发环境 1. 配置C/C开发环境1.1 下载和配置MinGW-w64编译器套件1.2 安装C/C插件 2. 在VSCode上编写C语言代码&#xff0c;并编译执行2.1 先打开一个文件夹&#xff0c;写一份C语言代码2.2 设置C/C编译的选项&#xff1a;c_cpp_properties.json2.3 创建执行任务&a…

CDGA|数据治理:唤醒“沉睡”的数据,激发无限价值潜能

在当今这个信息爆炸的时代&#xff0c;数据已成为企业最宝贵的资产之一。然而&#xff0c;许多企业面临着数据孤岛、数据质量低下、数据利用率不高等问题&#xff0c;导致大量“沉睡”的数据未能发挥其应有的价值。数据治理&#xff0c;作为解锁这些数据宝藏的钥匙&#xff0c;…

连夜爆肝收藏各大云服务新老用户优惠活动入口地址(内含免费试用1个月的地址),适用于小白,大学生,开发者,小企业老板....

具体请前往&#xff1a;云服务器优惠活动入口大全--收藏各主流云厂商的云服务器等系列产品的优惠活动入口&#xff0c;免费试用1个月活动入口&#xff0c;让新老用户都能根据使用场景和身份快速锁定优惠权益 经济下滑&#xff0c;被优化增多&#xff0c;大学生就业难&#xff0…

Linux之如何找回 root 密码?

1、启动系统&#xff0c;进入开界面&#xff0c;在界面中按“e"进入编辑界面 2、进入编辑界面&#xff0c;使用键盘上的上下键把光标往下移动&#xff0c;找到以”Linux16“开通内容所在的行数&#xff0c;在行的最后面输入&#xff1a;init/bin/sh 3、输入完成后&…

Windows,MySQL主从复制搭建

前提&#xff1a;windows环境&#xff0c;同一个服务器安装多个相同版本的mysql数据库 多个MySQL服务搭建完成后&#xff0c;下面我们进行主从复制的相关配置 1.主数据库 执行指令 #创建用户 CREATE USER slavelocalhost IDENTIFIED BY 123456;#授权 GRANT REPLICATION SLA…

plpo vue实战版教程

vue实战版教程 什么是plpo安装1.将plop添加到您的项目2.全局安装plop(可选&#xff0c;但建议使用方便)3.在项目根目录下创建一个 plopfile.js vue 实战&#xff08;后台管理系统 - 增删改查&#xff09;所需文件文件介绍创建配置文件 plopfile.js创建模板和脚本命令文件模板创…

Emu3:北京智源推出AI多模态世界模型,超越DeepMind和微软,刷新了8项性能指标

Emu3是北京智源人工智能研究院推出的一款原生多模态世界模型&#xff0c;采用智源自研的多模态自回归技术路径&#xff0c;在图像、视频、文字上联合训练&#xff0c;使模型具备原生多模态能力&#xff0c;实现图像、视频、文字的统一输入和输出。Emu3将各种内容转换为离散符号…

食堂校园预约就餐系统小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;商品管理&#xff0c;论坛管理&#xff0c;用户管理&#xff0c;商家管理&#xff0c;公告信息管理&#xff0c;基础数据管理 微信端账号功能包括&#xff1a;系统首页&#xf…