HarmonyOS 无法暂停声音播放

根据avplayer文档查看,但是isSound=false还是无法实现关闭声音。

// 注册avplayer回调函数
setAVPlayerCallback(avPlayer: media.AVPlayer) {
  // seek操作结果回调函数
  avPlayer.on('seekDone', (seekDoneTime: number) => {
    console.info(`AVPlayer seek succeeded, seek time is ${seekDoneTime}`);
  })
  // error回调监听函数,当avPlayer在操作过程中出现错误时调用 reset接口触发重置流程
  avPlayer.on('error', (err: BusinessError) => {
    console.error(`Invoke avPlayer failed, code is ${err.code}, message is ${err.message}`);
    if (!this.isSound) {
      avPlayer.reset();
    }
    // 调用reset重置资源,触发idle状态
  })
  // 状态机变化回调函数
  avPlayer.on('stateChange', async (state: string, reason: media.StateChangeReason) => {
    switch (state) {
      case 'idle': // 成功调用reset接口后触发该状态机上报
        console.info('AVPlayer state idle called.');
        if (this.isSound) {
          avPlayer.release(); // 调用release接口销毁实例对象
          break;
        }
      case 'initialized': // avplayer 设置播放源后触发该状态上报
        console.info('AVPlayer state initialized called.');
        avPlayer.prepare();
        break;
      case 'prepared': // prepare调用成功后上报该状态机
        console.info('AVPlayer state prepared called.');
        if (this.isSound) {
          avPlayer.play(); // 调用播放接口开始播放
          break;
        }
      case 'playing': // play成功调用后触发该状态机上报
        console.info('AVPlayer state playing called.');
        if (this.isSound) {
          if (this.count !== 0) {
            if (this.isSeek) {
              console.info('AVPlayer start to seek.');
              avPlayer.seek(avPlayer.duration); //seek到音频末尾
            } else {
              // 当播放模式不支持seek操作时继续播放到结尾
              console.info('AVPlayer wait to play end.');
            }
          }
        } else {
          avPlayer.pause(); // 调用暂停接口暂停播放
        }
        this.count++;
        break;
      case 'paused': // pause成功调用后触发该状态机上报
        console.info('AVPlayer state paused called.');
        avPlayer.play(); // 再次播放接口开始播放
        break;
      case 'completed': // 播放结束后触发该状态机上报
        console.info('AVPlayer state completed called.');
        if (this.isSound = false) {
          avPlayer.stop(); //调用播放结束接口
        }
        break;
      case 'stopped': // stop接口成功调用后触发该状态机上报
        console.info('AVPlayer state stopped called.');
        this.isSound = false
        avPlayer.reset(); // 调用reset接口初始化avplayer状态

        break;
      case 'released':
        console.info('AVPlayer state released called.');
        break;
      default:
        console.info('AVPlayer state unknown called.');
        break;
    }
  })
}

//播放录音
async playRecording(text: string) {
  // 创建avPlayer实例对象
  let avPlayer: media.AVPlayer = await media.createAVPlayer();
  // 创建状态机变化回调函数
  this.setAVPlayerCallback(avPlayer);
  this.isSeek = false; // 不支持seek操作
  avPlayer.url = text;
}
}
HarmonyOS
2天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Heiang

case 'idle’中销毁了实例对象,只需要删除case 'idle’下的avPlayer.release()即可。

分享
微博
QQ
微信
回复
1天前
相关问题
HarmonyOS 播放器后台暂停音频播放
31浏览 • 1回复 待解决
HarmonyOS soundpool播放声音的问题
684浏览 • 1回复 待解决
HarmonyOS mp3的播放暂停
128浏览 • 1回复 待解决
后台播放声音会直接无声
2015浏览 • 1回复 待解决
HarmonyOS ohaudio 通话模式声音无法外放
561浏览 • 1回复 待解决
HarmonyOS 直播流无法播放
214浏览 • 1回复 待解决