UWP使用MediaPlayerElement如何监听按钮点击及切换播放曲目
问题1:监听MediaPlayerElement传输控制按钮的点击事件
你不需要单独捕获按钮的点击事件,可通过MediaPlayer和MediaPlaybackList的原生事件实现所有操作的监听:
- 播放/暂停操作:订阅
MediaPlayer.PlaybackSession.CurrentStateChanged事件,通过播放状态判断用户操作 - 上一曲/下一曲切歌操作:订阅
MediaPlaybackList.CurrentItemChanged事件,即可捕获所有切歌行为,包含用户点击传输控制按钮的触发场景
示例代码:
public PlayerPage() { this.InitializeComponent(); CreatePlaylist(); mediaPlayerElement.MediaPlayer.Source = mediaPlaybackList; // 注册播放/暂停监听事件 mediaPlayerElement.MediaPlayer.PlaybackSession.CurrentStateChanged += PlaybackSession_CurrentStateChanged; // 注册切歌监听事件 mediaPlaybackList.CurrentItemChanged += MediaPlaybackList_CurrentItemChanged; } private void PlaybackSession_CurrentStateChanged(MediaPlaybackSession sender, object args) { switch (sender.PlaybackState) { case MediaPlaybackState.Playing: // 此处处理播放触发后的逻辑 break; case MediaPlaybackState.Paused: // 此处处理暂停触发后的逻辑 break; } } private void MediaPlaybackList_CurrentItemChanged(MediaPlaybackList sender, CurrentMediaPlaybackItemChangedEventArgs args) { // args.PreviousItem 为切换前的播放项 // args.NewItem 为切换后的播放项 // sender.CurrentIndex 为当前播放项在播放列表中的索引 int currentTrackIndex = sender.CurrentIndex; // 此处处理切歌后的逻辑 }
如果你需要在用户点击按钮时先执行自定义逻辑再决定是否执行对应操作,可以继承MediaTransportControls重写对应命令的执行逻辑,常规监听场景以上事件即可满足需求。
问题2:编程方式切换当前播放曲目
你可以直接操作MediaPlaybackList的内置方法/属性实现切歌:
- 切到下一曲:调用
MoveNext()方法 - 切到上一曲:调用
MovePrevious()方法 - 跳转到指定曲目:直接给
CurrentIndex赋值对应索引即可
示例代码:
// 切下一曲 if (mediaPlaybackList.CanMoveNext) { mediaPlaybackList.MoveNext(); } // 切上一曲 if (mediaPlaybackList.CanMovePrevious) { mediaPlaybackList.MovePrevious(); } // 跳转到列表第4首(索引从0开始计数) int targetIndex = 3; if (targetIndex >= 0 && targetIndex < mediaPlaybackList.Items.Count) { mediaPlaybackList.CurrentIndex = targetIndex; }
默认切歌完成后会自动播放,如果你不需要自动播放,切歌完成后调用mediaPlayerElement.MediaPlayer.Pause()即可。
内容的提问来源于stack exchange,提问作者Jose Afonso Braga
相关产品推荐
相关产品推荐

