HarmonyOS 鸿蒙Next中语音识别麦克风权限报错

HarmonyOS 鸿蒙Next中语音识别麦克风权限报错 无线调试APP时,已在module.json中设置了麦克风权限,还是报错, 语音识别错误 - 会话ID:,错误码:1002200012,消息:AudioCapturer create failed, please check the permission of MICROPHONE., 是什么原因?

3 回复

ohos.permission.MICROPHONE

允许应用使用麦克风。

权限级别:normal

授权方式:用户授权(user_grant)

起始版本:8

ohos.permission.MICROPHONE的授权方式是用户授权(user_grant),除了在module.json中添加权限之外,还需要在代码中像用户授权,可参考:向用户授权

更多关于HarmonyOS 鸿蒙Next中语音识别麦克风权限报错的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中,语音识别麦克风权限报错通常由权限未授权或配置错误导致。请检查是否在module.json5文件中正确声明了ohos.permission.MICROPHONE权限,并在应用首次请求时通过系统弹窗引导用户授权。若权限已授予仍报错,需排查音频录制接口调用逻辑与设备麦克风硬件状态。

这个错误码 1002200012 明确指向音频捕获器创建失败,核心原因是麦克风权限问题。即使你在 module.json 中声明了权限,但可能忽略了以下几个关键点:

  1. 权限未动态申请:从HarmonyOS Next开始,ohos.permission.MICROPHONE 属于敏感权限,必须在 module.json 中声明后,在运行时通过弹窗动态向用户申请。仅静态声明是不够的。

  2. 动态申请代码缺失或时机不当:你需要在启动语音识别或打开麦克风前,调用 abilityAccessCtrl 相关API(如 requestPermissionsFromUser)来触发用户授权弹窗。用户点击“允许”后,才能成功创建 AudioCapturer

  3. 权限申请未在主线程执行:动态申请权限必须在UI主线程中调用,否则可能无效。

  4. 配置文件错误:检查 module.json 中权限声明格式是否正确:

    {
      "module": {
        "requestPermissions": [
          {
            "name": "ohos.permission.MICROPHONE",
            "reason": "$string:microphone_permission_reason", // 可选,说明用途
            "usedScene": {
              "abilities": [
                "YourAbilityName"
              ],
              "when": "always"
            }
          }
        ]
      }
    }
    

    确保 abilities 字段填写了使用该权限的Ability名称。

解决方案: 在调用语音识别或 AudioCapturer 初始化代码前,加入动态权限申请逻辑。示例代码片段如下:

import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
import common from '@ohos.app.ability.common';

// 在Ability的上下文中
let context: common.UIAbilityContext = this.context;
let atManager = abilityAccessCtrl.createAtManager();

// 需要申请的权限列表
let permissions: Array<string> = ['ohos.permission.MICROPHONE'];

// 检查并申请权限
atManager.requestPermissionsFromUser(context, permissions).then((data) => {
  console.info('权限申请结果:', data.authResults);
  // 检查data.authResults中对应权限是否为0(0表示授权成功)
  if (data.authResults[0] === 0) {
    // 用户已授权,在此处执行初始化AudioCapturer或语音识别的代码
    this.initAudioCapturer();
  } else {
    // 用户拒绝,需要提示用户手动去设置中开启权限
    console.error('用户未授权麦克风权限');
  }
}).catch((err) => {
  console.error('申请权限失败:', err.code, err.message);
});

请重点检查并添加运行时动态权限申请流程。如果已添加,请检查申请是否成功(用户是否授权),以及授权后是否在正确的回调中初始化音频模块。

回到顶部