一、录音实现
使用AudioCapturer录制音频涉及到AudioCapturer实例的创建、音频采集参数的配置、采集的开始与停止、资源的释放等。建议搭配AudioCapturer的API说明阅读。
实现步骤
●在module.json5中配置权限
{
"module": {
...
"requestPermissions": [
...
// 麦克风
{
"name": "ohos.permission.MICROPHONE",
"reason": '$string:permission_reason_microphone',
"usedScene": {}
},
]
}
}
●向用户申请调用麦克风权限
/**
* 动态申请授权(首次弹窗申请)
* @param permissions 权限列表
* @returns 返回授权结果,授权成功为 Promise.resolve(), 拒绝授权为 Promise.reject()
*/
async requestPermissions(permissions: Permissions[]) {
// 1. 创建应用权限管理器
const atManager = abilityAccessCtrl.createAtManager()
// 2. 向用户申请 user_grant 权限(温馨提示:首次申请时会弹窗,后续申请则不会再出现弹窗)
const requestResult = await atManager.requestPermissionsFromUser(
getContext(), // 应用上下文
permissions // 参数:权限列表(数组)
)
// 通过 every 检查权限是否都成功授权
const isAuth = requestResult.authResults.every(item => item === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED)
// Promise.resolve() 返回 Promise 成功,await 后续代码,正常执行
// Promise.reject() 返回 Promise 错误,await 后续代码,不被执行,Promise.reject() 的结果可被 catch 捕获
return isAuth === true ? Promise.resolve(true) : Promise.reject(false)
}
/**
* 打开系统设置的权限管理页(处理授权结果)
*/
openPermissionSettingsPage() {
// 1. 获取应用上下文,并通过 as 断言收窄类型为 UIAbilityContext,否则 context 默认类型无法调用 startAbility 方法
const context = getContext() as common.UIAbilityContext
// 2. 获取 bundle 包信息
const bundleInfo = bundleManager.getBundleInfoForSelfSync(bundleManag