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. 真机效果

相关推荐
Hcourage1 天前
鸿蒙工程获取C/C++代码覆盖
harmonyos
二流小码农1 天前
鸿蒙开发:上传一张参考图片便可实现页面功能
android·ios·harmonyos
万少2 天前
HarmonyOS 开发必会 5 种 Builder 详解
前端·harmonyos
Huang兄2 天前
鸿蒙-List和Grid拖拽排序:仿微信小程序删除效果
harmonyos·arkts·arkui
anyup3 天前
🔥2026最推荐的跨平台方案:H5/小程序/App/鸿蒙,一套代码搞定
前端·uni-app·harmonyos
Ranger09293 天前
鸿蒙开发新范式:Gpui
rust·harmonyos
Huang兄3 天前
鸿蒙-深色模式适配
harmonyos·arkts·arkui
SummerKaze5 天前
为鸿蒙开发者写一个 nvm:hmvm 的设计与实现
harmonyos
在人间耕耘7 天前
HarmonyOS Vision Kit 视觉AI实战:把官方 Demo 改造成一套能长期复用的组件库
人工智能·深度学习·harmonyos
王码码20357 天前
Flutter for OpenHarmony:socket_io_client 实时通信的事实标准(Node.js 后端的最佳拍档) 深度解析与鸿蒙适配指南
android·flutter·ui·华为·node.js·harmonyos