3. 权限申请与语音识别引擎创建
使用 abilityAccessCtrl 申请录音权限,使用 speechRecognizer 创建语音识别引擎并设置监听回调。
async getPermission (context: Context): Promise<boolean> {
let atManager = abilityAccessCtrl.createAtManager();
return new Promise((resolve, reject) => {
atManager.requestPermissionsFromUser( context, ['ohos.permission.MICROPHONE'] )
.then((data) => {
data.authResults.forEach(item => {
if (item === 0) {
console.log(`获取录音权限成功`)
resolve(true)
} else {
console.error(`获取录音权限失败`)
reject(false)
}
})
})
})
}
async createSREngine () {
const extraParams: Record<string, Object> = {
"locate": "CN", "recognizerMode": "short"
}
const initParamsInfo: speechRecognizer.CreateEngineParams = {
language: 'zh-CN',
online: 1, extraParams
}
try {
this.asrEngine = await speechRecognizer.createEngine(initParamsInfo)
console.log(TAG, `语音转文字引擎创建成功`)
this.setListener()
} catch (e) {
console.error(TAG, `语音转文字引擎创建失败 ${e.code} ${e.message}`)
}
}
setListener () {
let setListener: speechRecognizer.RecognitionListener = {
onStart: (sessionId: string, eventMessage: string) => {
console.info(TAG, "onStart sessionId: " + sessionId + " eventMessage: " + eventMessage);
},
onEvent: (sessionId: string, eventCode: number, eventMessage: string) => {
console.info(TAG, "onEvent sessionId: " + sessionId + " eventCode: " + eventCode + "eventMessage: " + eventMessage);
},
onResult: (sessionId: string, result: speechRecognizer.SpeechRecognitionResult) => {
console.info(TAG, "onResult sessionId: " + sessionId + " result: " + JSON.stringify(result));
if (result.result) {
this.voiceText = result.result
}
if (result.isLast) {
setTimeout(() => { this.show = false }, 1000)
}
},
onComplete: (sessionId: string, eventMessage: string) => {
console.info(TAG, "onComplete sessionId: " + sessionId + " eventMessage: " + eventMessage);
},
onError: (sessionId: string, errorCode: number, errorMessage: string) => {
console.error(TAG, "onError sessionId: " + sessionId + " errorCode: " + errorCode + " errorMessage: " + errorMessage);
}
}
try {
this.asrEngine?.setListener(setListener);
console.log(TAG, `已设置监听回调`)
} catch (e) {
console.error(TAG, `设置监听回调失败`)
}
}
总结
通过上述代码实现,我们在 HarmonyOS Next 中完成了一个聊天页面底部输入组件的开发。该组件支持文字输入、语音输入切换和添加功能触发,同时具备语音识别功能。开发者可以根据实际需求对代码进行扩展和优化,以满足不同应用场景的需求。