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

相关推荐
yrjw1 小时前
一款基于 ReactNative 最新发布的`Android/iOS` 新架构文档预览开源库
harmonyos
ajassi20002 小时前
开源 Arkts 鸿蒙应用 开发(十三)音频--MP3播放
linux·华为·开源·harmonyos
zhanshuo13 小时前
让鸿蒙应用丝滑如飞:绘图性能优化全攻略(附代码实战)
harmonyos
zhanshuo13 小时前
适配鸿蒙低性能设备的终极优化方案:从启动到渲染全链路实战
harmonyos
Georgewu14 小时前
【HarmonyOS】鸿蒙ArkWeb加载优化方案详解
harmonyos
Georgewu14 小时前
【HarmonyOS】鸿蒙应用HTTPDNS 服务集成详解
harmonyos
simple_lau18 小时前
鸿蒙 3D 开发实战:从模型加载到动画管理的完整实现
harmonyos·arkts·arkui
litongde18 小时前
React Native 编程
react native·harmonyos
程序员老刘20 小时前
“工信部要求9月30日前APP必须100%适配鸿蒙“ 是真的吗?
flutter·harmonyos
默言_sun20 小时前
方舟web使用及数据双向通信
harmonyos