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

embedded/2024/10/9 4:57:44/

使用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/embedded/124892.html

相关文章

LeetCode:871. 最低加油次数(DP Java)

目录 871. 最低加油次数 题目描述: 实现代码与解析: DP 原理思路: 871. 最低加油次数 题目描述: 汽车从起点出发驶向目的地,该目的地位于出发位置东面 target 英里处。 沿途有加油站,用数组 stations…

web框架 django基础-1

bs&cs 常见的软件架构有bs架构和cs架构。 1、工作原理 C/S结构,即Client/Server(客户机/服务器)结构,客户端负责发送请求和处理一部分业务逻辑,服务器端负责处理主要业务逻辑、数据存储和检索。客户端通常需要安装专用的软件。例如:QQ、Pycharm、网易云音乐(安装在…

Mac 电脑设置键盘 Command键

Mac 电脑设置键盘 Command键 如果 mac 电脑连接的第三方键盘,有些键盘没有 command 按键,导致有些功能没有办法使用,比如你想复制粘贴发现也不可以。这个时候你需要设置一个按键为 command 按键。 比如上图中是把 Alt 键设置为 Command 键。 …

WordPress 6.7即将发布的新功能(和截图)

我们一直在密切关注 WordPress 6.7 的开发并测试该版本的测试版,它将带来一些令人兴奋的更新和几个新功能。 例如,我们很高兴地发现即将发布的版本将附带全新的默认主题,并对块编辑器和站点编辑体验进行大规模改进。 在本文中,我…

STM32 ADC的规则组与注入组详解(上)

STM32 ADC的规则组与注入组详解(下)-CSDN博客 STM32的模数转换器(ADC)广泛用于将模拟信号转换为数字信号,并应用于各种传感器数据采集、信号处理等场景。STM32的ADC模块不仅支持常规的采样模式,还提供了灵…

国内知名人工智能AI大模型专家培训讲师唐兴通讲授AI办公应用人工智能在营销与销售过程中如何应用数字化赋能

AI如火如荼,对商业与社会影响很大。 目前企业广泛应用主要是在营销、销售方向,提升办公效率等方向。 从喧嚣的AI导入营销与销售初步阶段,那么当下,领先的组织与个人现在正在做什么呢? 如何让人性注入冷冰冰的AI&…

Jenkins从入门到精通,构建高效自动化流程

目录 一、Jenkins简介1、Jenkins的历史与发展(1)Jenkins的起源(2)Jenkins的发展(3)Jenkins的社区与生态系统(4)Jenkins在我国的发展 2、Jenkins的核心功能3、Jenkins的应用场景 二、…

汽车电气系统中KL30、KL15、KL50、KLR、KL31、KL87、KL75的作用

目录 1、KL30 (Battery Positive Terminal) 2、KL15 (Ignition Switch, Positive) 3、KL50 (Starter Motor Terminal) 4、KLR (Ignition-Off Draw) 5、KL31 (Ground) 6、KL87 (Relay Output) 7、KL75 (Accessory) 在汽车电气系统中,KL系列的术语起源于德国&a…