分为三大步骤:配置权限、音频采集器、语音识别,实现这三大板块,就实现了语音搜索功能,如果想要增加额外效果,可以加一个按压振动、动画效果。
写在前面:
配置权限需要用到:配置module.json5、鉴权checkAccessToken()、申请权限requestPermissionsFromUser()、二次申请权限requestPermissionOnSetting()
语音识别:speechRecognizer
音频采集器:AudioCapturer的API说明
开发步骤:
1. 鉴权并向用户申请权限:
(1)在module.json5中配置麦克风权限(使用场景,使用原因)
{
"name": "ohos.permission.MICROPHONE",
"usedScene": {
'abilities': [
'PhoneAbility'
]
},
"reason": "$string:app_name"
},
(2)通过调用checkAccessToken()方法来校验当前是否已经授权
import { abilityAccessCtrl, bundleManager, Permissions } from '@kit.AbilityKit';
import { BusinessError } from '@kit.BasicServicesKit';
async function checkPermissionGrant(permission: Permissions): Promise<abilityAccessCtrl.GrantStatus> {
let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
let grantStatus: abilityAccessCtrl.GrantStatus = abilityAccessCtrl.GrantStatus.PERMISSION_DENIED;
// 获取应用程序的accessTokenID
let tokenId: number = 0;
try {
let bundleInfo: bundleManager.BundleInfo = await bundleManager.getBundleInfoForSelf(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION);
let appInfo: bundleManager.ApplicationInfo = bundleInfo.appInfo;
tokenId = appInfo.accessTokenId;
} catch (error) {
const err: BusinessError = error as BusinessError;
console.error(`Failed to get bundle info for self. Code is ${err.code}, message is ${err.message}`);
}
// 校验应用是否被授予权限
try {
grantStatus = await atManager.checkAccessToken(tokenId, permission);
} catch (error) {
const err: BusinessError = error as BusinessError;
console.error(`Failed to check access token. Code is ${err.code}, message is ${err.message}`);
}
return grantStatus;
}
async function checkPermissions(): Promise<void> {
let grantStatus1: boolean = await checkPermissionGrant('ohos.permission.LOCATION') === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED;// 获取精确定位权限状态
let grantStatus2: boolean = await checkPermissionGrant('ohos.permission.APPROXIMATELY_LOCATION') === abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED;// 获取模糊定位权限状态
// 精确定位权限只能跟模糊定位权限一起申请,或者已经有模糊定位权限才能申请精确定位权限
if (grantStatus2 && !grantStatus1) {
// 申请精确定位权限
} else if (!grantS

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



