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

news/2024/10/3 13:55:43 标签: harmonyos, 华为

使用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.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)
}
代码解释是这样的:至于这段代码为什么没有直接申请
//这里不能直接请求是因为需要在应用里跳转到设置去请求打开应用的权限
//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.niftyadmin.cn/n/5688488.html

相关文章

Redis: Sentinel工作原理和故障迁移流程

Sentinel 哨兵几个核心概念 1 ) 定时任务 Sentinel 它是如何工作的,是如何感知到其他的 Sentinel 节点以及 Master/Slave节点的就是通过它的一系列定时任务来做到的,它内部有三个定时任务 第一个就是每一秒每个 Sentinel 对其他 Sentinel 和 Redis 节点…

如何使用 Python 读取数据量庞大的 excel 文件

使用 pandas.read_excel 读取大文件时,的确会遇到性能瓶颈,特别是对于10万行20列这种规模的 .xlsx 文件,常规的 pandas 方法可能会比较慢。 要提高读取速度,关键是找到更高效的方式处理 Excel 文件,特别是在 Python 的…

计算机网络:计算机网络体系结构 —— OSI 模型 与 TCP/IP 模型

文章目录 计算机网络体系结构OSI 参考模型TCP/IP 参考模型分层的必要性物理层的主要问题数据链路层的主要问题网络层的主要问题运输层的主要问题应用层的主要问题 分层思想的处理方法发送请求路由器转发接受请求发送响应接收响应 计算机网络体系结构 计算机网络体系结构是指将…

结合vueuse实现图片懒加载

介绍 为什么要有懒加载? 在一个网页中如果有很多张图片,那么用户初进这个页面的时候不必一次性把所有图片都加载出来,否则容易造成卡顿和浪费。应该是,用户的视图页面滑到该图片的位置,然后再把该图片加载出来。 前置…

rabbitMq-----路由匹配模块

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言交换机类型binding_key 和 routing_key匹配算法 前言 交换机有三种类型,直接交换,广播交换,主题交换。 其中交换机类型不同…

LabVIEW提高开发效率技巧----快速实现原型和测试

在LabVIEW开发中,DAQ助手(DAQ Assistant)和Express VI为快速构建原型和测试功能提供了极大的便利,特别适合于简单系统的开发和早期验证阶段。 DAQ助手:是一种可视化配置工具,通过图形界面轻松设置和管理数据…

初步认识产品经理

产品经理 思考问题的维度 1️⃣为什么要抓住核心用户? 所有和产品有关系的群体就是用户,存在共性和差异了解用户的付费点,更好的优化产品是否使用:(目标用户-已使用产品:种子用户-尝鲜;核心用…

C#基础(4)封装——成员方法

前言 我们在上一节学习了关于类的成员变量的使用,甚至也看到了相应的成员方法,我们可以将二者理解为类里面的变量和函数。 如果我这样说你肯定就能很快理解成员方法是什么作用了。 C#中设计成员方法的目的是为了将相关的功能代码组织在一起&#xff0…