# 播放音频，进度条无法拖动

## 问题现象

播放音频时不能拖动进度条。

## 背景知识

1. [使用AVPlayer播放音频(ArkTS)](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/using-avplayer-for-playback)：使用AVPlayer可以实现端到端播放原始媒体资源，在应用开发的过程中，开发者可以通过AVPlayer的state属性主动获取当前状态，或使用on('stateChange')方法监听状态变化。
2. [Slider](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-slider)：滑动条组件，通常用于快速调节设置值，如音量调节、亮度调节等应用场景。

## 问题定位

1. 检查是否注册事件监听：AVPlayer需注册timeUpdate和seekDone事件实现进度同步。若未处理seekDone事件可能导致播控中心状态不同步。

   ```screen
   avPlayer.on('timeUpdate', (currentTime: number) => {
     this.currentPosition = currentTime; // 实时更新进度条位置
   });

   avPlayer.on('seekDone', (seekTime: number) => {
     this.currentPosition = seekTime; // 确保seek完成后更新状态
     session.setAVPlaybackState({ position: { elapsedTime: seekTime } });
   });
   ```

2. 检查异步操作时序：避免在seek()操作完成前修改进度条显示。

   ```screen
   // 错误写法：未等待seek操作完成即更新进度
   this.avPlayer.seek(newPosition);
   this.currentPosition = newPosition; // 可能导致进度条回弹

   // 正确写法：在seekDone回调中更新状态
   avPlayer.on('seekDone', (time) => {
     this.currentPosition = time;
   });
   ```

3. 检查Slider组件与AVPlayer联动是否异常：使用Slider的onChange事件触发seek()操作时，需绑定AVPlayer实例。

   ```screen
   Slider({
     value: this.currentPosition,
     max: this.duration
   })
   .onChange((value: number) => {
     this.avPlayer.seek(value); // 调用AVPlayer的seek方法
   });
   ```

## 分析结论

1. 未进行相关事件监听。
2. 异步操作时序混乱。
3. Slider组件未绑定AVPlayer实例调用seek方法控制滑动条跳转。

## 修改建议

以下方案详细步骤及完整示例可参考[运行完整示例](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/using-avplayer-for-playback#运行完整示例)。

1. 添加timeUpdate和seekDone事件监听。
2. 确保在seek操作完成后更新进度。
3. Slider组件在onChange时调用AVPlayer的seek方法同步状态。

