关于鸿蒙next 调用系统权限麦克风

server/2024/12/23 0:02:47/

使用app的时候都清楚,想使用麦克风、摄像头,存储照片等,都需要调用系统的权限,没有手机操作系统权限你也使用不了app所提供的功能,虽然app可以正常打开,但是你需要的功能是没办法使用的。今天把自己在鸿蒙学习中遇到的问题打算记录下来,并整理成自己的学习之路,今天来说一下麦克风的权限的开启。
在EntryAbility.ets中,在oncreate函数里,没有加载页面的时候去申请一下系统权限。代码如下:
async onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {
hilog.info(0x0000, ‘testTag’, ‘%{public}s’, ‘Ability onCreate’);

//一进app进行的权限申请(必须),不然页面调用麦克风权限没有麦克风勾选
let manager= abilityAccessCtrl.createAtManager()
await manager.requestPermissionsFromUser(this.context,['ohos.permission.MICROPHONE'])

}
需要创建一个manager,manager中有个获取权限的函数,参数的context,一个是你需要获取的麦克风权限。至于为什么异步。是获取权限的函数是需要等待的返回值是Promis看见这种返回值的都是需要等待的,如果不想写await 函数名前加async也可以(.then)然后写回调函数,就是请求后返回一个结果,至于你怎么处理根据你的需求来。至少这一点和unity的开发相关性不大,一般是在task任务需要异步等待,前面的代码是第一步,至于为什么是第一步,上边代码有注释。就是你必须需要,真机上不知道可不可以,但是模拟器上是需要这么操作,如果一开始使用者禁用了app的权限申请,那么在使用权限的地方再次申请也可以。
第二步:
先上代码:
async checkViocePermission() {
let manager = abilityAccessCtrl.createAtManager()
//这里不能直接请求是因为需要在应用里跳转到设置去请求打开应用的权限
//manager.requestPermissionsFromUser()
//获取应用信息
let bundleinfo = bundleManager.getBundleInfoForSelfSync(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION)
//检测当前这个应用有没有获取到麦克风授权
let status = manager.checkAccessTokenSync(bundleinfo.appInfo.accessTokenId, ‘ohos.permission.MICROPHONE’)

if (status === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED) {//如果授予了this.showVioceCom = true
} else {//如果没授予跳转到设置应用 把当前的app信息传过去,然后去授予权限let UIAbilityContext = getContext() as common.UIAbilityContextlet want:Want={bundleName:'com.huawei.hmos.settings',abilityName:'com.huawei.hmos.settings.MainAbility',uri:'application_info_entry',parameters:{pushParams:bundleinfo.name}}
await  UIAbilityContext.startAbility(want)
}
代码解释是这样的:至于这段代码为什么没有直接申请
//这里不能直接请求是因为需要在应用里跳转到设置去请求打开应用的权限
//manager.requestPermissionsFromUser()
在模拟器中调用是是没反应的,就是说这个页面中去申请权限这么写是不行,不能像在EntryAbility中去使用,必须使用其他的办法。
就是上述代码中,你先去获取到应用的信息就是这个bundleinfo。我的理解是所有的应用,包括鸿蒙系统的应用都被管理就是这个bundleManager在管理,他有个函数就是获取包的信息getBundleInfoForSelfSync,参数是BundleFlag,是个枚举,有很多选择,这里就不一一介绍了

*用于获取包含 applicationInfo 的 bundleInfo。获取的 bundleInfo 不会

  • 包含 signatureInfo、hapModuleInfo、ability、extensionAbility 和 permission 等信息。
  • 获取到应用信息后,需要根本manager去检测你这个app有没有获取到你需要的权限,本章是获取的麦克风权限
  • let status = manager.checkAccessTokenSync(bundleinfo.appInfo.accessTokenId, ‘ohos.permission.MICROPHONE’)
  • 返回一个abilityAccessCtrl.GrantStatus的枚举,判断一下呗,如果PERMISSION_GRANTED就是获取了,然后你可以做你想要的事情,
  • 反之就是没授权,没有授权就跳到设置的Ability然后把你当前的需要授权的app信息传过去就可以去授权。
  • //如果没授予跳转到设置应用 把当前的wechat信息传过去,然后去授予权限
    let UIAbilityContext = getContext() as common.UIAbilityContext
    let want:Want={bundleName:‘com.huawei.hmos.settings’,
    abilityName:‘com.huawei.hmos.settings.MainAbility’,
    uri:‘application_info_entry’,
    parameters:{pushParams:bundleinfo.name}
    }
    await UIAbilityContext.startAbility(want)
    完整的截图看一下在这里插入图片描述
    如果一开始选择允许,那么以后不会再出现权限获取的弹窗了,如果禁止,那么在打开页面后,在你需要获取的地方需要获取权限在这里插入图片描述
    如果一开始没有再entryability中获取,是不会有麦克风的选择的,至少模拟器是这样。

http://www.ppmy.cn/server/126434.html

相关文章

51单片机的光照强度检测【proteus仿真+程序+报告+原理图+演示视频】

1、主要功能 该系统由AT89C51/STC89C52单片机LCD1602显示模块光照传感器按键蜂鸣器LED等模块构成。适用于光照强度检测、光照强度测量报警等相似项目。 可实现功能: 1、LCD1602实时显示光照强度信息 2、光照强度传感器(电位器模拟)采集光照信息 3、可…

Docker Init 实战详解:从入门到精通

1. 引言 在容器化应用开发的世界里,Docker 一直是首选工具。然而,对于初学者来说,创建 Dockerfile 和设置 Docker 环境可能是一个挑战。为了简化这个过程,Docker 引入了 docker init 命令。本文将深入探讨 Docker Init 的方方面面,从其诞生背景到高级应用,为您提供全面的…

玩转springboot之springboot定制化tomcat

定制化tomcat springboot中是集成了tomcat容器的,如何定制化内置的tomcat呢?springboot提供了定制化的接口 1.5.x版本 在1.5.x版本中使用的是EmbeddedServletContainerCustomizer接口来进行定制化的 public class MyTomcatCustomizer implements Embedde…

爬虫入门 Selenium使用

爬虫入门 & Selenium使用 特别声明📢:本教程只用于教学,大家在使用爬虫过程中需要遵守相关法律法规,否则后果自负!!! 项目代码:https://github.com/ziyifast/ziyifast-code_inst…

56 门控循环单元(GRU)_by《李沐:动手学深度学习v2》pytorch版

系列文章目录 文章目录 系列文章目录门控循环单元(GRU)门控隐状态重置门和更新门候选隐状态隐状态 从零开始实现初始化模型参数定义模型训练与预测 简洁实现小结练习 门控循环单元(GRU) 之前我们讨论了如何在循环神经网络中计算梯…

MySQL--数据库约束(详解)

目录 一、前言二、概念三、数据库约束3.1 约束类型3.1.1 NOT NULL 约束3.1.2 UNIQUE (唯一)3.1.3 DEFAULT(默认)3.1.4 PRIMARY KEY(主键)3.1.5 FOREIGN KEY(外键)3.1.6 CHECK 四、总结 一、前言…

Excel下拉菜单制作及选项修改

Excel下拉菜单 1、下拉菜单制作2、下拉菜单修改 下拉框(选项菜单)是十分常见的功能。Excel支持下拉框制作,通过预设选项进行菜单选择,可以避免手动输入错误和重复工作,提升数据输入的准确性和效率 1、下拉菜单制作 步…

小徐影院:探索Spring Boot的影院管理

第二章开发技术介绍 2.1相关技术 小徐影城管理系统是在Java MySQL开发环境的基础上开发的。Java是一种服务器端脚本语言,易于学习,实用且面向用户。全球超过35%的Java驱动的互联网站点使用Java。MySQL是一个数据库管理系统,因为它…