Skip to content

RecordAudio

调用原生平台麦克风/录音模块的能力。

点击查看示意图An image

类型定义

typescript
type StartOptions = {
    fileName?: string;
    sampleRate?: number;
    bitRate?: number;
};

type StopResult = {
    path: string;
    durationMs: number;
};

/**
 * 权限申请结果状态
 * - granted: 已授权
 * - denied: 被拒绝(可再次申请)
 * - never_ask_again: 被永久拒绝(需引导用户去设置页)
 */
type PermissionStatus = 'granted' | 'denied' | 'never_ask_again';

type PermissionResult = {
    granted: boolean;
    status: PermissionStatus;
};

权限管理

以下 API 需要 RECORD_AUDIO 权限,请确保 h5pack.json 中已配置 "nativePermission": ["RECORD_AUDIO"]

checkPermission

查看是否拥有麦克风权限

  • 类型
typescript
checkPermission(): Promise<boolean | void>;
  • 使用
typescript
h5packBridge.recordAudio.checkPermission().then(res => {
	console.log('checkPermission', res)
})

requestPermission

申请麦克风权限。(调用之后 App 会有权限申请的弹窗)

返回结果包含 grantedstatus 字段,可区分三种状态:

  • granted: 已授权

  • denied: 被拒绝(可再次申请)

  • never_ask_again: 被永久拒绝(需引导用户去设置页手动开启)

  • 类型

typescript
requestPermission(): Promise<PermissionResult | void>;
  • 使用
typescript
h5packBridge.recordAudio.requestPermission().then(res => {
    if (res?.granted) {
        console.log('已获得麦克风权限')
    } else if (res?.status === 'never_ask_again') {
        // 需要引导用户去设置页
        h5packBridge.recordAudio.openAppSettings()
    } else {
        console.log('用户拒绝了麦克风权限')
    }
})

openAppSettings

跳转应用详情设置页。用于权限被永久拒绝(never_ask_again)时引导用户手动开启权限。

  • 类型
typescript
openAppSettings(): void;
  • 使用
typescript
h5packBridge.recordAudio.openAppSettings()

录音

start

打开麦克风录音

  • 类型
typescript
start(options?: StartOptions): Promise<string>;
  • 使用
typescript
h5packBridge.recordAudio.start().then(res => {
	console.log('开始录音res', res)
})
  • 错误处理
typescript
try {
    const res = await h5packBridge.recordAudio.start()
} catch (error) {
    switch (error.code) {
        case 'RECORD_AUDIO_PERMISSION_DENIED':
            // 权限被拒绝,可再次申请
            break
        case 'RECORD_AUDIO_PERMISSION_NEVER_ASK_AGAIN':
            // 权限被永久拒绝,引导用户去设置页
            h5packBridge.recordAudio.openAppSettings()
            break
        default:
            console.error('录音失败:', error.message)
    }
}

stop

停止录音

  • 类型
typescript
stop(): Promise<StopResult>;
  • 使用
typescript
h5packBridge.recordAudio.stop().then(res => {
	console.log('停止录音res', res)
})

cancel

取消录音

  • 类型
typescript
cancel(): Promise<void>;
  • 使用
typescript
h5packBridge.recordAudio.cancel().then(res => {
	console.log('取消录音res', res)
})

restart

重新开始录音

  • 类型
typescript
restart(options?: StartOptions): Promise<string>;
  • 使用
typescript
h5packBridge.recordAudio.restart().then(res => {
	console.log('重新开始录音res', res)
})

错误码

错误码说明建议处理方式
RECORD_AUDIO_PERMISSION_DENIED麦克风权限被拒绝(可再次申请)可重新调用 requestPermission()
RECORD_AUDIO_PERMISSION_NEVER_ASK_AGAIN麦克风权限被永久拒绝调用 openAppSettings() 引导用户手动开启
RECORD_AUDIO_ERROR录音操作失败提示用户稍后重试
PERMISSION_CHECK_ERROR权限检查失败系统异常,提示用户稍后重试
PERMISSION_REQUEST_ERROR权限申请失败系统异常,提示用户稍后重试