harmonyOS(鸿蒙)— 麦克风权限(调用麦克风申请权限)

harmonyOS(麦克风权限)

  • 前言
    • [1. 配置路径](#1. 配置路径)
    • [2. 权限申请](#2. 权限申请)
    • [3. 授权检测](#3. 授权检测)
    • [4. 调用](#4. 调用)
    • [5. 真机效果](#5. 真机效果)

前言

app的开发中往往需要申请很多的权限来完成适配,麦克风的适配相比于网络和WiFi权限来说相对麻烦些,除了在module.json5配置权限外,平时工作会在element的string中统一名字的配置,具体路径如下所示


1. 配置路径

2. 权限申请

module.json5

dart 复制代码
    "requestPermissions":[
      {
        "name": "ohos.permission.MICROPHONE", //麦克风权限
        "reason": "$string:apply_microphone", //string中设置的名字
        "usedScene": {
          "abilities": [
            "EntryAbility"
          ],
          "when": "inuse"
        }
      }
    ]

element => string

dart 复制代码
{
  "string": [
    {
      "name": "apply_microphone",
      "value": "相机权限"
    }
  ]
}

3. 授权检测

requestPermissionsFromUser会帮我们去检测授权状态,如果没授权过会唤起弹窗让用户选择,此授权代码借鉴于华为技术文档。

dart 复制代码
import { abilityAccessCtrl, common, Permissions } from "@kit.AbilityKit";
import { BusinessError } from "@kit.BasicServicesKit";

export function permissionMicrophone(
  context: common.UIAbilityContext,
  permissionResult: (allow: boolean) => void
): void {
  let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
  let permissions: Array<Permissions> = ['ohos.permission.MICROPHONE'];

  // requestPermissionsFromUser会判断权限的授权状态来决定是否唤起弹窗
  atManager.requestPermissionsFromUser(context, permissions).then((data) => {
    let Status: Array<number> = data.authResults;
    let length: number = Status.length;

    for (let i = 0; i < length; i++) {
      if (Status[i] === 0) {
        // 用户授权,可以继续访问目标操作
        permissionResult(true);
        console.debug("permissionLog:麦克风授权成功:用户授权");
      } else {
        // 用户拒绝授权,提示用户必须授权才能访问当前页面的功能,并引导用户到系统设置中打开相应的权限
        permissionResult(false);
        console.debug("permissionLog:麦克风授权失败:用户拒绝");
        return;
      }
    }
    // 授权成功
  }).catch((err: BusinessError) => {
    permissionResult(false);
    console.error(`Failed to request permissions from user. Code is ${err.code}, message is ${err.message}`);
  });
}

4. 调用

我这里是通过点击按钮调用的,只是测试功能连通性

dart 复制代码
import { permissionMicrophone} from '../utils/PermissionMicrophome';
import { common } from '@kit.AbilityKit';

@Entry
@Component
struct Index {
  //获取Ability上下文
  private context = getContext(this) as common.UIAbilityContext;

  build() {
    RelativeContainer() {
      Button('麦克风',{type:ButtonType.Capsule,stateEffect:true})
        .alignRules({
          center : {anchor:'__container__' , align : VerticalAlign.Center},
          middle : {anchor:'__container__' , align : HorizontalAlign.Center}
        })
        .onClick(() => {
          // 调用权限请求方法
          permissionMicrophone(this.context, (allowed) => {
            if (allowed) {
              // 授权成功逻辑
              console.log('权限已授予');
            } else {
              // 授权失败处理
              console.log('权限被拒绝');
            }
          });
        })
    }
    .height('100%')
    .width('100%')
  }
}

查询日志信息

5. 真机效果

相关推荐
C雨后彩虹29 分钟前
计算疫情扩散时间
java·数据结构·算法·华为·面试
24zhgjx-lxq1 小时前
华为ensp:MSTP
网络·安全·华为·hcip·ensp
qq_177767371 小时前
React Native鸿蒙跨平台数据使用监控应用技术,通过setInterval每5秒更新一次数据使用情况和套餐使用情况,模拟了真实应用中的数据监控场景
开发语言·前端·javascript·react native·react.js·ecmascript·harmonyos
烬头88212 小时前
React Native鸿蒙跨平台应用实现了onCategoryPress等核心函数,用于处理用户交互和状态更新,通过计算已支出和剩余预算
前端·javascript·react native·react.js·ecmascript·交互·harmonyos
小雨青年3 小时前
鸿蒙 HarmonyOS 6 | 系统能力 (06) 构建现代化通知体系 从基础消息到实况
华为·harmonyos
木斯佳3 小时前
HarmonyOS 6实战(源码解析篇):音乐播放器的音频焦点管理(上)——AudioSession与打断机制
华为·音视频·harmonyos
2601_949593654 小时前
基础入门 React Native 鸿蒙跨平台开发:卡片组件
react native·react.js·harmonyos
沐芊屿4 小时前
华为交换机配置M-LAG
服务器·网络·华为
qq_177767375 小时前
React Native鸿蒙跨平台剧集管理应用实现,包含主应用组件、剧集列表、分类筛选、搜索排序等功能模块
javascript·react native·react.js·交互·harmonyos
qq_177767375 小时前
React Native鸿蒙跨平台自定义复选框组件,通过样式数组实现选中/未选中状态的样式切换,使用链式调用替代样式数组,实现状态驱动的样式变化
javascript·react native·react.js·架构·ecmascript·harmonyos·媒体