/// <summary> /// Called when the user requests an action using application/system provided UI /// </summary> /// <param name="player">The BackgroundAudioPlayer</param> /// <param name="track">The track playing at the time of the user action</param> /// <param name="action">The action the user has requested</param> /// <param name="param">The data associated with the requested action. /// In the current version this parameter is only for use with the Seek action, /// to indicate the requested position of an audio track</param> /// <remarks> /// User actions do not automatically make any changes in system state; the agent is responsible /// for carrying out the user actions if they are supported. /// /// Call NotifyComplete() only once, after the agent request has been completed, including async callbacks. /// </remarks> protected override void OnUserAction(BackgroundAudioPlayer player, AudioTrack track, UserAction action, object param) { switch (action) { case UserAction.Play: if (track != null && track.Tag != null) { var data = track.Tag.ToString().Split('$'); var url = data[data.Length - 1]; var type = data[2]; if (type.ToLower() != "shoutcast") { track.Source = new Uri(url); } } //player.Track = new AudioTrack(null, "", "", "", null, track.Tag, EnabledPlayerControls.Pause); if (player.SafeGetPlayerState() != PlayState.Playing) { player.Play(); } break; case UserAction.Stop: if (player.SafeGetPlayerState() == PlayState.Playing) player.Stop(); break; case UserAction.Pause: if (player.SafeGetPlayerState() == PlayState.Playing) player.Pause(); break; case UserAction.FastForward: //player.FastForward(); break; case UserAction.Rewind: //player.Rewind(); break; case UserAction.Seek: //player.Position = (TimeSpan)param; break; case UserAction.SkipNext: //player.Track = GetNextTrack(); break; case UserAction.SkipPrevious: //AudioTrack previousTrack = GetPreviousTrack(); //if (previousTrack != null) //{ // player.Track = previousTrack; //} break; } NotifyComplete(); }