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


前言

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


1. 配置路径

在这里插入图片描述

2. 权限申请

module.json5

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

element => string

{
  "string": [
    {
      "name": "apply_microphone",
      "value": "相机权限"
    }
  ]
}

3. 授权检测

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

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. 调用

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

import { permissionMicrophone} from '../utils/PermissionMicrophome';
import { common } from '@kit.AbilityKit';



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

在这里插入图片描述

### 获取 HarmonyOS 麦克风权限及使用方法 在 HarmonyOS 中,麦克风属于敏感权限的一部分[^1]。为了能够访问麦克风并录制音频数据,开发者需要遵循特定的权限声明流程以及调用相应的 API。 #### 声明麦克风权限 要在应用中请求麦克风权限,需在 `config.json` 文件中显式声明所需的权限。具体操作如下: ```json { "reqPermissions": [ { "name": "ohos.permission.RECORD_AUDIO" } ] } ``` 上述代码片段展示了如何通过配置文件声明录音权限 `ohos.permission.RECORD_AUDIO`[^2]。 #### 动态请求权限 除了静态声明外,在运行时还需要动态向用户请求该权限。以下是实现动态请求的一个示例代码: ```java import ohos.aafwk.content.Intent; import ohos.app.Context; import ohos.bundle.IBundleManager; import ohos.hiviewdfx.HiLog; public class PermissionUtil { public static final int REQUEST_CODE_RECORD_AUDIO = 100; public void requestRecordAudioPermission(Context context) { Intent intent = new Intent(); String[] permissions = {"ohos.permission.RECORD_AUDIO"}; intent.setFlags(Intent.FLAG_ABILITY_SLICE_MULTI_PROCESS); ((Context)context).verifySelfPermission(permissions, (result) -> { if (!result.isEmpty() && result.get(0)) { HiLog.info(null, "User granted RECORD_AUDIO permission."); } else { HiLog.error(null, "User denied RECORD_AUDIO permission."); } }); } } ``` 此代码实现了对麦克风权限的动态验证与请求逻辑。 #### 使用麦克风录制音频 一旦获得必要的权限后,就可以利用 HarmonyOS 提供的相关类库来完成实际的功能开发工作。下面是一个简单的例子展示如何启动录音过程: ```java import ohos.media.audio.AudioCapturer; import ohos.media.audio.AudioCapturerConfig; public class AudioRecorder { private AudioCapturer audioCapturer; public void startRecording() throws Exception { AudioCapturerConfig config = new AudioCapturerConfig.Builder().build(); this.audioCapturer = new AudioCapturer(config); try { this.audioCapturer.prepare(); // Prepare the capturer. this.audioCapturer.start(); // Start capturing audio data. } catch (IllegalStateException e) { throw new RuntimeException("Failed to prepare or start recording.", e); } System.out.println("Started Recording..."); } public void stopRecording() { if (this.audioCapturer != null) { this.audioCapturer.stop(); // Stop capturing audio data. this.audioCapturer.release(); // Release resources held by the capturer. } } } ``` 以上代码说明了如何初始化、准备和开始录音会话,并最终停止它。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值