录音的审核 ios android都正常,鸿蒙出现operateRecorder:fail:appid privacy api
banned
async function onTouchStart(e: any) {
if (!checkLoginStatus()) return
// 停止语音播放
uni.$emit('voice_play_stop_all')
const touch = e.touches[0]
if (!touch) return
startTouchY.value = touch.clientY
isCancelRecording.value = false
touchStartTime.value = Date.now()
isFingerDown.value = true
// 延迟启动录音,如果用户在 300ms 内松手,则视为点击而非录音
setTimeout(async () => {
// 检查用户是否已经松手(touchend/touchcancel 已经触发)
if (!isFingerDown.value) {
return
}
try {
console.log('=== 开始录音...')
await voice.startRecording()
console.log('=== 录音已启动')
// 检查是否因为隐私授权弹窗导致录音自动启动
// 如果是,立即停止录音,提示用户再次操作
if (privacyJustAgreed.value) {
privacyJustAgreed.value = false
voice.cancelRecording()
isRecording.value = false
console.log('[录音] 隐私授权刚完成,停止自动录音')
uni.showToast({ title: '授权成功,请再次录音', icon: 'none', duration: 2000 })
return
}
// 录音真正开始后才设置状态
isRecording.value = true
// 设置最大录音时长回调,到达30秒自动停止并发送
voice.onMaxDurationReached = () => {
uni.showToast({ title: '录音已达最长30秒', icon: 'none' })
onTouchEnd()
}
} catch (err: any) {
console.error('=== 录音启动失败:', err.message, err)
isRecording.value = false
isFingerDown.value = false
// 根据错误类型显示不同的提示
if (err.message === '麦克风权限被拒绝') {
// 权限被拒绝,弹框已显示,提示用户需要再次点击录音
uni.showToast({ title: '请再次长按开始录音', icon: 'none' })
} else if (err.message === '首次权限申请,请再次长按录音') {
// 首次权限申请,提示用户再次长按
uni.showToast({ title: '请再次长按开始录音', icon: 'none' })
} else if (err.message === '录音已取消') {
// 权限对话框弹出后取消录音
uni.showToast({ title: '请再次长按开始录音', icon: 'none' })
} else if (err.message === '授权成功,请再次录音') {
// 隐私授权刚完成,voice.ts 已经显示了 toast,这里不再额外提示
console.log('[录音] 隐私授权完成,等待用户再次录音')
} else if (err.message === 'PRIVACY_DISAGREED') {
// 隐私授权被拒绝,PrivacyModal 已经显示了 toast,这里不再额外提示
console.log('[录音] 隐私授权被拒绝')
} else {
uni.showToast({ title: '录音失败: ' + err.message, icon: 'none', duration: 3000 })
}
}
}, MIN_RECORD_DURATION)
}
