收藏
回答

鸿蒙系统录音失败?

录音的审核 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)

}


回答关注问题邀请回答
收藏

1 个回答

  • 智能回答 智能回答 本次回答由AI生成
    06-23
    有用 1
    回复
登录 后发表内容