当前位置: 首页 > news >正文

HarmonyOS-权限管理

一. 权限分类

 1. system_grant

system_grant 为系统授权,无需询问用户,常用的权限包括网络请求、获取网络信息、获取wifi信息、获取传感器数据等。

/* system_grant(系统授权)*/static readonly INTERNET = 'ohos.permission.INTERNET' // 网路请求static readonly GET_NETWORK_INFO = 'ohos.permission.GET_NETWORK_INFO' // 网络信息-读static readonly GET_WIFI_INFO = 'ohos.permission.GET_WIFI_INFO' // WIFI信息-读static readonly GYROSCOPE = 'ohos.permission.GYROSCOPE' // 陀螺仪传感器static readonly ACCELEROMETER = 'ohos.permission.ACCELEROMETER' // 加速度传感器

2. user_grant

user_grant 是需要用户授权的权限,常用的权限包括定位、相机、麦克风、日历、文件读写等。

/* user_grant(用户授权)*/static readonly LOCATION = 'ohos.permission.LOCATION' // 定位-精确static readonly APPROXIMATELY_LOCATION = 'ohos.permission.APPROXIMATELY_LOCATION' // 定位-模糊static readonly LOCATION_IN_BACKGROUND = 'ohos.permission.LOCATION_IN_BACKGROUND' // 定位-后台static readonly CAMERA = 'ohos.permission.CAMERA' // 相机static readonly MICROPHONE = 'ohos.permission.MICROPHONE' // 麦克风static readonly READ_CONTACTS = 'ohos.permission.READ_CONTACTS' // 通讯录-读static readonly WRITE_CONTACTS = 'ohos.permission.WRITE_CONTACTS' // 通讯录-写static readonly READ_CALENDAR = 'ohos.permission.READ_CALENDAR' // 日历-读static readonly WRITE_CALENDAR = 'ohos.permission.WRITE_CALENDAR' // 日历-写static readonly WRITE_IMAGEVIDEO = 'ohos.permission.WRITE_IMAGEVIDEO' // 图片视频-写static readonly READ_IMAGEVIDEO = 'ohos.permission.READ_IMAGEVIDEO' // 图片视频-读static readonly MEDIA_LOCATION = 'ohos.permission.MEDIA_LOCATION' // 多媒体-本地static readonly WRITE_AUDIO = 'ohos.permission.WRITE_AUDIO' // 音频-写static readonly READ_AUDIO = 'ohos.permission.READ_AUDIO' // 音频-读static readonly READ_MEDIA = 'ohos.permission.READ_MEDIA' // 文件-读static readonly WRITE_MEDIA = 'ohos.permission.WRITE_MEDIA' // 文件-写static readonly APP_TRACKING_CONSENT = 'ohos.permission.APP_TRACKING_CONSENT' // 广告标识符static readonly DISTRIBUTED_DATASYNC = 'ohos.permission.DISTRIBUTED_DATASYNC' // 多设备协同static readonly ACCESS_BLUETOOTH = 'ohos.permission.ACCESS_BLUETOOTH' // 使用蓝牙能力static readonly READ_PASTEBOARD = 'ohos.permission.READ_PASTEBOARD' // 剪贴板static readonly READ_HEALTH_DATA = 'ohos.permission.READ_HEALTH_DATA' // 健康数据static readonly ACTIVITY_MOTION = 'ohos.permission.ACTIVITY_MOTION' // 健身运动

二. 权限声明 

1. system_grant

在应用 entry 模块的 module.json5 中添加权限声明。

"requestPermissions": [{"name": "ohos.permission.INTERNET"}, {"name": "ohos.permission.GET_NETWORK_INFO"}, {"name": "ohos.permission.GET_WIFI_INFO"}
]

 2. user_grant

在应用 entry 模块的 module.json5 中添加权限声明。

"requestPermissions": [{"name": "ohos.permission.LOCATION","reason": "$string:PERMISSION_LOCATION","usedScene": {"abilities": ["EntryAbility"],"when":"inuse"}},{"name": "ohos.permission.APP_TRACKING_CONSENT","reason": "$string:PERMISSION_TRACKING_CONSENT","usedScene": {"abilities": ["EntryAbility"],"when":"inuse"}}
]

三. 权限应用 

1. system_grant

使用该类权限不需要弹窗让用户授权,只需要判断一下该权限在应用中是否声明。

import { abilityAccessCtrl, bundleManager, PermissionRequestResult, Permissions, Want } from '@kit.AbilityKit';export class PermissionManager {async checkPermissions(): void {const bundleInfo: bundleManager.BundleInfo = await bundleManager.getBundleInfoForSelf(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION)const tokenId = bundleInfo.appInfo.accessTokenIdconst atManager = abilityAccessCtrl.createAtManager()const state = atManager.checkAccessTokenSync(tokenId, 'ohos.permission.INTERNET')if (state === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED) {console.log('网络请求可用')} else {console.log('网络请求不可用')}}
}

2. user_grant

使用该类权限需要先判断用户是否授权,先由用户授权之后再使用该类权限相关的能力。

import { abilityAccessCtrl, bundleManager, PermissionRequestResult, Permissions, common } from '@kit.AbilityKit';export class PermissionManager {async checkPermissions(): Promise<void> {const bundleInfo: bundleManager.BundleInfo = await bundleManager.getBundleInfoForSelf(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION)const tokenId = bundleInfo.appInfo.accessTokenIdconst atManager = abilityAccessCtrl.createAtManager()const state = atManager.checkAccessTokenSync(tokenId, 'ohos.permission.LOCATION')if (state === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED) {console.log('定位权限已开启')} else {const context = AppStorage.get('ability_context') as common.UIAbilityContext // 在EntryAbility中存储AbilityContextconst result: PermissionRequestResult = await atManager.requestPermissionsFromUser(context, ['ohos.permission.LOCATION', 'ohos.permission.APPROXIMATELY_LOCATION'])const authResults: Array<number> = result.authResultsconst grantStatus: boolean = (authResults[0] === 0)if (grantStatus) {console.log('定位权限已开启')} else {console.log('定位权限未开启')}      }}
}

3. notification

推送通知的权限是基于 notificationMananger 服务实现,不同于 system_agent 和 user_agent。

import notificationManager from '@ohos.notificationManager';export class PermissionManager {async checkNotificationPermissions(): Promise<void> {let grantStatus = await notificationManager.isNotificationEnabled()if (!grantStatus) {await notificationManager.requestEnableNotification()grantStatus = await notificationManager.isNotificationEnabled()if (!grantStatus) {console.log('通知权限未开启')} else {console.log('通知权限已开启')}} else {console.log('通知权限已开启')}}
}

4. 跳转到APP设置页

import bundleManager from '@ohos.bundle.bundleManager';
import { common, Want } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';export class PermissionManager {async gotoSetting(): Promise<void> {const bundleFlags = bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATIONconst bundleParam = bundleManager.getBundleInfoForSelfSync(bundleFlags)const bundleId = bundleParam.namelet wantInfo: Want = {bundleName: 'com.huawei.hmos.settings',abilityName: 'com.huawei.hmos.settings.MainAbility',uri: 'application_info_entry',parameters: {pushParams: bundleId}}const context = AppStorage.get('ability_context') as common.UIAbilityContext // 在EntryAbility中存储AbilityContextcontext.startAbility(wantInfo).catch((error: BusinessError) => {console.error(`startAbility-error: ${JSON.stringify(error)}`)})}
}

源码参考: harmonyos-permission

相关文章:

HarmonyOS-权限管理

一. 权限分类 1. system_grant system_grant 为系统授权&#xff0c;无需询问用户&#xff0c;常用的权限包括网络请求、获取网络信息、获取wifi信息、获取传感器数据等。 /* system_grant&#xff08;系统授权&#xff09;*/static readonly INTERNET ohos.permission.INTE…...

Github 2024-11-02 Rust开源项目日报 Top10

根据Github Trendings的统计,今日(2024-11-02统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10Python项目2Dart项目1RustDesk: 用Rust编写的开源远程桌面软件 创建周期:1218 天开发语言:Rust, Dart协议类型:GNU Affero Genera…...

修改HarmonyOS鸿蒙图标和名字,打包后安装到真机,应用图标丢失变成透明,修改名字也不生效,还是默认的labeL解决方案教程

HarmonyOS鸿蒙打包hap 安装应用到桌面没有图标&#xff0c;用hdc安装到真机&#xff0c;打包后应用图标丢失变成透明&#xff0c;名字也还是默认的label的bug&#xff0c;以下是解决方案 以下是修改方案&#xff1a; 1、修改应用名字&#xff1a; 2、修改应用图标&#xff1a…...

unreal engine5动画重定向

UE5系列文章目录 文章目录 UE5系列文章目录前言一、下载动画资源二、创建IK Rig&#xff08;IK绑定&#xff09; 前言 在Unreal Engine 5.4中&#xff0c;动画重定向&#xff08;Animation Retargeting&#xff09;和动作匹配&#xff08;Motion Matching&#xff09;是两种不…...

蓝桥杯练习笔记(二十-日期问题)

日期题常见于填空题&#xff0c;关键点涉及闰年的判断和星期几的判断 1.根据间隔天数计算日期 题目来源&#xff1a;CSDN算法技能树 在X星系的广袤空间中漂浮着许多X星人造“炸弹”&#xff0c;用来作为宇宙中的路标。 每个炸弹都可以设定多少天之后爆炸。 比如&#xff1a;…...

jenkins 构建报错 mvn: command not found

首先安装过 maven&#xff0c;并且配置过环境变量 win r ,输入 cmd 键入 mvn -v 出现上图输出&#xff0c;则证明安装成功。 原因 jenkins 没有 maven 配置全局属性, 导致无法找到 mvn 命令。 解决方案 找到全局属性&#xff0c;点击新增&#xff0c;配置 MAVEN_HOME 路…...

Vue computed watch

computed watch watch current prev...

【java】java的基本程序设计结构06-运算符

运算符 一、分类 算术运算符关系运算符位运算符逻辑运算符赋值运算符其他运算符 1.1 算术运算符 操作符描述例子加法 - 相加运算符两侧的值A B 等于 30-减法 - 左操作数减去右操作数A – B 等于 -10*乘法 - 相乘操作符两侧的值A * B等于200/除法 - 左操作数除以右操作数B /…...

数据建模圣经|数据模型资源手册卷3,数据建模最佳实践

简介 本书采用了类设计模式的方式对数据模型进行高度抽象总结&#xff0c;展现了常见的数据模型构建模型等模型的作用、层次、分类、地位、沟通方式&#xff0c;和业务规则。使用一个强大的数据模型模式的数据建模&#xff0c;评估特定与广义模型的优缺点&#xff0c;有助于你改…...

Kafka相关知识点(上)

为什么要使用消息队列&#xff1f; 使用消息队列的主要目的主要记住这几个关键词:解耦、异步、削峰填谷。 解耦: 在一个复杂的系统中&#xff0c;不同的模块或服务之间可能需要相互依赖&#xff0c;如果直接使用函数调用或者 API 调用的方式&#xff0c;会造成模块之间的耦合…...

network HCIE认证

#1 ip地址设置 ip add 192.168.1.1 255.255.255.0 ip add 192.168.1.2 255.255.255.0 #2 DHCP 交换机上配置 system-view //进入系统配置 dhcp enable int g0/0/1 //接入接口管理 dhcp select interface //配置dncp选择接口 #3 DNS域名系统 int g0/0/1 dhcp server dn…...

造纸粉体分散机、改性包覆机、改性打散机

包覆改性机在造纸填料中的应用是近年来造纸行业技术创新的一个重要方向。通过包覆改性&#xff0c;可以改善填料的表面性质&#xff0c;提升其在纸张中的留着率和分布均匀性&#xff0c;进而增强纸张的性能&#xff0c;降低生产成本。以下是包覆改性机在造纸填料中的具体应用及…...

npm入门教程1:npm简介

一、基本概述 定义&#xff1a;npm是一个开源的JavaScript包管理器&#xff0c;它允许开发者下载、安装、发布和管理Node.js包。地位&#xff1a;npm是Node.js生态系统中不可或缺的一部分&#xff0c;为开发者提供了丰富的第三方库和工具。起源&#xff1a;npm由Isaac Z. Schl…...

Vue3使用AntV | X6绘制流程图:开箱即用

x6官方地址X6图编辑引擎 | AntV 官方文档仔细地介绍了很多丰富的功能&#xff0c;这里的demo可以满足基本的使用&#xff0c;具体拓展还需要仔细看文档内容 先上效果图 1、安装 通过 npm 或 yarn 命令安装 X6。 # npm npm install antv/x6 --save# yarn yarn add antv/x6 …...

grpc 快速入门

gRPC 是一个现代的远程过程调用&#xff08;RPC&#xff09;框架&#xff0c;由 Google 开发。它使用 HTTP/2 作为传输协议&#xff0c;并采用 Protocol Buffers&#xff08;protobuf&#xff09;作为接口描述语言&#xff08;IDL&#xff09;。gRPC 提供高效的通信、语言无关性…...

layui 实现 城市联动

<div class"layuimini-container"><form id"app-form" class"layui-form layuimini-form"><div class"layui-form-item"><label class"layui-form-label">标题</label><div class"la…...

C++11标准模板(STL)- 常用数学函数 - 分类及比较 - 对给定的浮点值分类(std::fpclassify)

常用数学函数 对给定的浮点值分类 std::fpclassify 定义于头文件 <math.h> #define fpclassify(arg) /* implementation defined */ (C99 起) 归类浮点值 arg 到下列类别中&#xff1a;零、非正规、正规、无穷大、 NaN 或实现定义类别。该宏返回整数值。 忽略 FLT_EV…...

报错:npm : 无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本。

报错场景 使用npm run dev 报错 npm : 无法加载文件 C:\Program Files\nodejs\npm.ps1&#xff0c;因为在此系统上禁止运行脚本。有关详细信息&#xff0c;请参阅 https:/go.microsoft.com/fwlink/?LinkID135170 中的 about_Execution_Policies。 所在位置 行:1 字符: 1 npm…...

OpenCV基本操作(python开发)——(7)实现图像校正

OpenCV基本操作&#xff08;python开发&#xff09;——&#xff08;1&#xff09; 读取图像、保存图像 OpenCV基本操作&#xff08;python开发&#xff09;——&#xff08;2&#xff09;图像色彩操作 OpenCV基本操作&#xff08;python开发&#xff09;——&#xff08;3&…...

[项目] C++基于多设计模式下的同步异步日志系统

[项目] C基于多设计模式下的同步&异步日志系统 文章目录 [项目] C基于多设计模式下的同步&异步日志系统日志系统1、项目介绍2、开发环境3、核心技术4、日志系统介绍4.1 日志系统的价值4.2 日志系统技术实现4.2.1 同步写日志4.2.2 异步写日志 5、相关技术知识5.1 不定参…...

大模型岗位大盘点!小白也能快速上手的5大方向,速来抄作业!

作者参加春招宣讲会后&#xff0c;对大模型岗位产生兴趣&#xff0c;但因自身条件感到迷茫。文章详细盘点了大模型相关岗位&#xff0c;包括核心算法、应用算法、系统与基建、数据与评测、工程开发、产品与运营六大类&#xff0c;并分析了各岗位的职责与要求。作者建议小白可从…...

Vita3K模拟器终极指南:免费跨平台畅玩PSVita游戏

Vita3K模拟器终极指南&#xff1a;免费跨平台畅玩PSVita游戏 【免费下载链接】Vita3K Experimental PlayStation Vita emulator 项目地址: https://gitcode.com/gh_mirrors/vi/Vita3K 想要在电脑上重温《女神异闻录4黄金版》的经典剧情&#xff0c;或是体验《A Rose in …...

SMUDebugTool效能优化手册:3大核心场景的性能突破之道

SMUDebugTool效能优化手册&#xff1a;3大核心场景的性能突破之道 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://gi…...

Origin绘图进阶:如何在现有图形上叠加散点图与等高线(附完整操作步骤)

Origin高级绘图技巧&#xff1a;散点图与等高线的完美叠加实战指南 科研数据可视化中&#xff0c;单一图表往往难以全面展示复杂数据关系。当您需要在同一坐标系中同时呈现离散数据点与连续趋势时&#xff0c;散点图与等高线的组合堪称黄金搭档。这种混合图表特别适合展现发动机…...

别再混淆了!JavaScript与Java的10个本质区别(附常见面试题解析)

别再混淆了&#xff01;JavaScript与Java的10个本质区别&#xff08;附常见面试题解析&#xff09; 当面试官问"Java和JavaScript有什么区别"时&#xff0c;超过60%的初级开发者会给出"它们就像汽车和地毯的关系"这类玩笑式回答。但真正理解这两种语言的核…...

PaddleOCR Docker镜像实战:从Java调用到表格识别,一个容器搞定OCR全流程

PaddleOCR Docker镜像实战&#xff1a;从Java调用到表格识别全流程指南 在数字化转型浪潮中&#xff0c;OCR&#xff08;光学字符识别&#xff09;技术已成为企业处理纸质文档、票据和表格数据的关键工具。PaddleOCR作为百度开源的OCR解决方案&#xff0c;凭借其出色的中文识别…...

OpenClaw安全加固指南:百川2-13B模型权限与文件操作隔离

OpenClaw安全加固指南&#xff1a;百川2-13B模型权限与文件操作隔离 1. 为什么需要安全加固&#xff1f; 上周我在调试一个自动整理文档的OpenClaw任务时&#xff0c;差点酿成大祸。当时AI助手误将/usr/local/bin识别为"需要整理的文件夹"&#xff0c;开始疯狂删除…...

电子课本下载终极指南:三步完成国家教育平台PDF高效获取

电子课本下载终极指南&#xff1a;三步完成国家教育平台PDF高效获取 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具 项目地址: https://gitcode.com/GitHub_Trending/tc/tchMaterial-parser 在数字化教育浪潮中&#xff0c;教师和学生面…...

Arduino库管理终极指南:在VS Code中如何优雅添加自定义头文件(避坑版)

Arduino库管理终极指南&#xff1a;在VS Code中优雅添加自定义头文件 第一次在VS Code里看到"fatal error: my_library.h: No such file or directory"的红色报错时&#xff0c;我盯着屏幕发了五分钟呆。作为从Arduino IDE转战VS Code的老玩家&#xff0c;本以为能无…...

【MATLAB实战:从BCI Competition IV 2a数据加载到预处理全流程】

1. 初识BCI Competition IV 2a数据集 第一次接触脑机接口&#xff08;BCI&#xff09;研究时&#xff0c;最让人头疼的就是数据预处理。BCI Competition IV 2a数据集作为入门级黄金标准&#xff0c;包含了9名受试者的EEG数据&#xff0c;记录了左手、右手、双脚和舌头四种运动想…...