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

相关推荐
鸿蒙开发18 小时前
鸿蒙(HarmonyOS NEXT)表单校验别再手撸正则了 —— 我写了个 ArkTS 版 zod
harmonyos
TrisighT19 小时前
ArkTS 的 @BuilderParam 你八成只用了皮毛——那个尾随闭包写法差点被我当 bug 删了
harmonyos·arkts·arkui
ONEDAY2 天前
HarmonyOS 多 Product 构建实践:一套代码生成多个产物
harmonyos
TT_Close2 天前
别劝退了!5秒搞定 Flutter 鸿蒙 FVM 起跑线
flutter·harmonyos·visual studio code
TrisighT2 天前
ArkTS 列表滚动时为什么会闪现旧数据?我扒了 LazyForEach 的复用逻辑
harmonyos·arkts·arkui
MonkeyKing2 天前
鸿蒙ArkTS深度剖析:ArkTS与TS/JS核心差异、静态强类型实战优势
typescript·harmonyos
TrisighT2 天前
Electron鸿蒙PC上写日志文件,我被权限和路径坑了两次
electron·harmonyos
TrisighT3 天前
一个下午搞定 ArkTS 折叠面板?结果我从两点写到晚上九点
harmonyos·arkts·arkui
花椒技术5 天前
HJPusher / HJPlayer SDK 实践:我们为什么把直播推播链路拆成一套可复用能力
设计模式·harmonyos·直播
一维Ace6 天前
HarmonyOS ArkTS 按钮组件全解:Button、Toggle 状态交互实战
harmonyos