鸿蒙开发之用户隐私权限申请
一、简介
鸿蒙开发过程中可用于请求的权限一共有两种:normal和system_basic。以下内容摘自官网:
-
normal权限
normal 权限允许应用访问超出默认规则外的普通系统资源。这些系统资源的开放(包括数据和功能)对用户隐私以及其他应用带来的风险很小。
该类型的权限仅向APL等级为normal及以上的应用开放。
-
system_basic权限
system_basic权限允许应用访问操作系统基础服务相关的资源。这部分系统基础服务属于系统提供或者预置的基础功能,比如系统设置、身份认证等。这些系统资源的开放对用户隐私以及其他应用带来的风险较大。
该类型的权限仅向APL等级为system_basic及以上的应用开放。
-
system_core权限
system_core权限涉及到开放操作系统核心资源的访问操作。这部分系统资源是系统最核心的底层服务,如果遭受破坏,操作系统将无法正常运行。
鉴于该类型权限对系统的影响程度非常大,目前暂不向任何三方应用开放。
二、使用
以用户的MICROPHONE麦克风权限为例
我们在使用麦克风之前需要先查看用户权限,然后,如果没有开启需要跳转系统设置页面,引导用户开启权限。
import abilityAccessCtrl, { Permissions } from '@ohos.abilityAccessCtrl';
import bundleManager from '@ohos.bundle.bundleManager';
import common from '@ohos.app.ability.common';
@Entry
@Component
struct PermissionTest {build() {Column() {Text('check permission').width(200).height(200).backgroundColor(Color.Orange).onClick(() => {//检测权限状态checkPermissions()})}.backgroundColor(Color.Red).width('100%').height('100%')}
}/** 获取accessToken* */
async function checkAccessToken(permission: Permissions): Promise<abilityAccessCtrl.GrantStatus> {let atManager = abilityAccessCtrl.createAtManager()let grantStatus :abilityAccessCtrl.GrantStatus//获取accessTkenIDlet tokenId: numbertry {let bundleInfo: bundleManager.BundleInfo = await bundleManager.getBundleInfoForSelf(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION)let appInfo: bundleManager.ApplicationInfo = bundleInfo.appInfotokenId = appInfo.accessTokenId} catch (err) {console.log('get BundleInfo For self failed '+err.code + 'message='+err.message)}//检验是否授权try {grantStatus = await atManager.checkAccessToken(tokenId,permission)} catch (err) {console.log('checkAccessToken failed'+err.code + 'message='+err.message)}return grantStatus
}/** 检查权限状态* */
async function checkPermissions():Promise<void> {const permissions: Array<Permissions> = ['ohos.permission.MICROPHONE']let grantStatus: abilityAccessCtrl.GrantStatus = await checkAccessToken(permissions[0])if (grantStatus === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED) {console.log('permission has requeired')} else {console.log('need request permission')//请求权限requestPermission()}
}/** 请求权限* */
function requestPermission() {let context = getContext(this) as common.UIAbilityContextlet atManger = abilityAccessCtrl.createAtManager()let permissions: Array<Permissions> = ['ohos.permission.MICROPHONE']atManger.requestPermissionsFromUser(context,permissions).then((data) => {let grantStatus: Array<number> = data.authResultslet grantPermissions: Array<string> = data.permissionslet length: number = grantStatus.lengthconsole.log('user permissoned length' + JSON.stringify(grantPermissions)+length)for(let i = 0; i<length; i++) {if (grantStatus[i] === 0) {console.log('user has agreed permissoned')} else {console.log('user has disagree permissoned')openPermissionSettings()return}}}).catch((err) =>{console.log('requestPermissionFromUserfailed'+err.code + 'message='+err.message)})
}/** 跳转到权限设置页面* */
function openPermissionSettings() {let context = getContext(this) as common.UIAbilityContextlet wantInfo = {action: 'action.settings.app.info',parameters: {settingsParamBundleName: 'com.example.myapplication'}}context.startAbility(wantInfo).then(() => {console.log('open setting page')}).catch((err) => {console.log('open setting page failed')})
}
三、注意事项
1、需要在module.json5文件中配置权限申请
{'name': 'ohos.permission.MICROPHONE','usedScene' : {"when": "inuse"}
}
2、如果需要引导跳转系统的设置页面,注意bundleName要正确,否则不跳转
相关文章:
鸿蒙开发之用户隐私权限申请
一、简介 鸿蒙开发过程中可用于请求的权限一共有两种:normal和system_basic。以下内容摘自官网: normal权限 normal 权限允许应用访问超出默认规则外的普通系统资源。这些系统资源的开放(包括数据和功能)对用户隐私以及其他应用带…...
Docker笔记:简单部署 nodejs 项目和 golang 项目
docker 简单的维护 nodejs 项目容器 1 )Nodejs 程序 const express require(express) const app express()app.get(/, (req, res) > {res.send(首页) })app.get(/news, (req, res) > {res.send(news) })// dokcer 做端口映射不要指定ip app.listen(3000)2…...
java内置的数据结构
Java语言提供了许多内置的数据结构,包括: 1. 数组(Array):数组是最基本的数据结构之一,它是一个有序的元素集合,每个元素都有一个对应的索引。在Java中,数组可以通过声明和初始化来创…...
轻松搭建FPGA开发环境:第三课——Vivado 库编译与设置说明
工欲善其事必先利其器,很多人想从事FPGA的开发,但是不知道如何下手。既要装这个软件,又要装那个软件,还要编译仿真库,网上的教程一大堆,不知道到底应该听谁的。所以很多人还没开始就被繁琐的开发环境搭建吓…...
【PostgreSQL】从零开始:(十一)PostgreSQL-Dropdb命令删除数据库
dropdb命令删除数据库 命令 [postgrespostgre-sql bin]$ dropdb --help dropdb removes a PostgreSQL database.Usage:dropdb [OPTION]... DBNAMEOptions:-e, --echo show the commands being sent to the server-f, --force try to terminate …...
UDP网络编程其他相关事项
netstat指令 netstat -an 可以查看当前主机网络情况,包括端口监听情况和网络连接情况。 netstat -an | more 可以分页显示。 要求在dos控制台下执行。 说明:(1)Listening表示某个端口在监听;(2…...
Redhat LINUX 9.3 + PG 16.1 搭建主备流复制
一直想搭建一个PG流复制,最近正好有一个新环境,操作系统是最新的,rhel 9.3,数据库是最新的 pg 16.1,借鉴了网上的步骤,尤其是小工到专家的内容,在此谢过。 1.安装环境 1)IP: 主:192.168.133.151…...
kafka设置消费者组
安装部署后 consumer.properties group.idtest-group 单机测试,自己开俩窗口,一个测试消费者,一个测试生产者(创建消息那步) 创建主题 bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replica…...
Worker-Thread设计模式
Worker-Thread模式类似于工厂流水线,有时也称为流水线设计模式。线程池在某种意义上也算是Worker-Thread模式的一种实现,线程池初始化时创建线程类似于在流水线等待工作的工人,提交给线程池的Runnable接口类似于需要加工的产品,Ru…...
npm 安装包遇到问题的常用脚本(RequestError: socket hang up)
前言 最近在给一个基于 Electron 的开源项目做贡献,需要去安装一些 npm 库,由于众所周知的原因,经常会出现报错: npm ERR! path D:\Projects\project\node_modules\electron npm ERR! command failed npm ERR! command C:\Windo…...
活动 | Mint Blockchain 将于 2024 年 1 月 10 号启动 MintPass 限时铸造活动
MintPass 是由 Mint Blockchain 官方发行的 Mint 网络和社区的 NFT 通行证,将在 2024 年 1 月份启动限时铸造活动。今天这篇文章会着重向大家介绍即将举办的 MintPass 活动的基础信息。 MintPass 有 2 种类型: 类型 1:Mint Genesis NFT Mint…...
Android动画(四)——属性动画ValueAnimator的妙用
目录 介绍 效果图 代码实现 xml文件 介绍 ValueAnimator是ObjectAnimator的父类,它继承自Animator。ValueAnimaotor同样提供了ofInt、ofFloat、ofObject等静态方法,传入的参数是动画过程的开始值、中间值、结束值来构造动画对象。可以将ValueAnimator看…...
C语言飞机大战
一、前言 [设计难度 : ★☆☆☆☆ [参考书籍:《C语言课程设计与游戏开发实践教程》 [主要涉及知识:函数封装 循环判断语句 [程序运行效果图: [主要的游戏功能: 通过按键’w’,‘s’,‘a’,d’分别实现飞机的上下左右移动 按空格…...
js 原型 和 原型链
function Person(name,age){ this.name name this.age age } var p new Person(张三,11) //创建构造函数的时候,解析器会自动为构造函数创建prototype属性,prototype属性对应的对象就是原型对象 // prototype 翻译为 原…...
如何利用SD-WAN节省运维成本和简化运维工作?
在当今数字化时代,企业对于网络的要求越来越高,需要保障网络的安全性、可靠性和灵活性。同时,随着企业的上云和远程办公等需求的增加,传统的WAN网络已经无法满足企业的需求。因此,SD-WAN技术应运而生。 SD-WAN节省运维…...
在工作中使用CHAT提高效率
问CHAT:数智时代与中国情境下的营销管理创新方向:市场营销(管理)的使命 CHAT回复:市场营销(管理)的使命可以被概述为寻找、吸引和保留消费者。通过识别、满足甚至超越消费者期望,以实…...
Maven 项目的三种打包方式与 pom.xml 文件中项目描述
目录: 定义项目的信息 本项目描述相关标签<parent> 标签<relativePath/> 标签<scope> 标签 Maven 三种打包方式 JARWARPOM 原文链接 — —...
【普中】基于51单片机简易计算器数码管显示设计( proteus仿真+程序+实物演示+讲解视频)
【普中开发板】基于51单片机简易计算器数码管显示设计( proteus仿真程序实物演示讲解视频) Proteus 仿真:Proteus 8.16(有低版本) 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:P04 1. 主要功能:…...
【Android】DeepLink
官方文档:创建指向应用内容的深层链接 Intro to Deep Linking on Android What is Deep linking? Deeplinks are a concept that help users navigate between the web and applications. They are basically URLs which navigate users directly to the specif…...
微服务Redis-Session共享登录状态
一、背景 随着项目越来越大,需要将多个服务拆分成微服务,使代码看起来不要过于臃肿,庞大。微服务之间通常采取feign交互,为了保证不同微服务之间增加授权校验,需要增加Spring Security登录验证,为了多个服务…...
知识竞赛的“复活”机制:给落后者第二次机会
🔄 知识竞赛的“复活”机制:给落后者第二次机会包容偶然 挖掘潜力 见证逆袭🎯 引言在知识竞赛中,胜负往往取决于临场发挥、题型适应甚至运气。一次抢答失误、一道冷门题目,都可能让准备充分的选手遗憾离场。…...
如何快速上手PCL点云库:10个核心模块详解与实践
如何快速上手PCL点云库:10个核心模块详解与实践 【免费下载链接】pcl-learning 🔥PCL(Point Cloud Library)点云库学习记录 项目地址: https://gitcode.com/gh_mirrors/pc/pcl-learning PCL(Point Cloud Librar…...
短路保护+过流保护+过热保护:MP9447GL-Z的车规级电源可靠性分析
MP9447GL-Z:36V/5A同步降压转换器的高密度电源方案在工业设备、通信基站以及消费电子电源适配器等应用中,电源管理单元需要同时满足宽输入电压、大输出电流和高转换效率的多重要求。传统的分立方案往往需要在PCB面积、BOM成本和散热设计之间做出权衡。MP…...
深度解析:开源AI框架如何实现智能文档转换与自动化工作流
深度解析:开源AI框架如何实现智能文档转换与自动化工作流 【免费下载链接】PPTAgent An Agentic Framework for Reflective PowerPoint Generation 项目地址: https://gitcode.com/gh_mirrors/pp/PPTAgent PPTAgent是一个基于多代理架构的开源AI框架…...
第十五篇:《压测结果分析与调优实践:瓶颈定位与性能优化》
压测执行只是开始,真正的价值在于从结果中定位瓶颈并推动优化。面对一堆响应时间、TPS、错误率曲线,如何判断系统哪里出了问题?如何区分是代码、数据库、中间件还是硬件瓶颈?本文将系统讲解压测结果的分析方法,结合监控…...
如何5分钟快速提升GitHub访问速度:FastGithub完整配置指南
如何5分钟快速提升GitHub访问速度:FastGithub完整配置指南 【免费下载链接】FastGithub github定制版的dns服务,解析访问github最快的ip 项目地址: https://gitcode.com/gh_mirrors/fa/FastGithub GitHub作为全球开发者最常用的代码托管平台&…...
从硬开关到软开关:推挽谐振变换器原理与PSIM仿真实战
1. 从经典到谐振:为什么我们需要推挽变换器?在电源设计的工具箱里,推挽变换器(Push-Pull Converter)绝对算得上是一位“老将”。它的核心思想非常直观:利用一个带中心抽头的变压器,让两个开关管…...
NoFences:免费开源的Windows桌面分区工具终极指南,告别杂乱图标
NoFences:免费开源的Windows桌面分区工具终极指南,告别杂乱图标 【免费下载链接】NoFences 🚧 Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 你是否厌倦了Windows桌面上混乱不堪的…...
【Oracle数据库指南】第45篇:Oracle SQL优化基础
上一篇【第44篇】Oracle性能监控——关键指标与工具 下一篇【第46篇】# Oracle内存与参数调优 摘要 SQL优化是Oracle DBA和开发人员必须掌握的核心技能。一条低效的SQL不仅自身执行慢,还会消耗大量CPU、I/O和内存资源,影响整个数据库的性能。本文从执行…...
Claude Code 模型特定调优与 A/B 测试全解析:Feature Flag、灰度发布、Undercover、安全门控、Prompt 调优与 AI Agent 工程化实战
一、先说结论:AI Agent 真正难的不是“会调用模型”,而是“能持续驾驭模型”很多人做 AI 编码助手、企业智能体、研发提效工具时,第一反应是接入一个更强的大模型:换成更大的参数、更新的版本、更长的上下文,似乎问题就…...
