public void Run(IBackgroundTaskInstance taskInstance) { nowPlayingManager = new NowPlayingManager(); systemControls = SystemMediaTransportControls.GetForCurrentView(); systemControls.ButtonPressed += HandleButtonPressed; systemControls.PropertyChanged += HandlePropertyChanged; systemControls.IsEnabled = true; systemControls.IsPauseEnabled = true; systemControls.IsPlayEnabled = true; systemControls.IsPreviousEnabled = true; systemControls.IsNextEnabled = true; taskInstance.Canceled += new BackgroundTaskCanceledEventHandler(OnCanceled); taskInstance.Task.Completed += HandleTaskCompleted; var value = ApplicationSettingsHelper.ReadResetSettingsValue(AppConstants.AppState); if (value == null) { foregroundTaskStatus = ForegroundTaskStatus.Unknown; } else { foregroundTaskStatus = (ForegroundTaskStatus)Enum.Parse(typeof(ForegroundTaskStatus), value.ToString()); } BackgroundMediaPlayer.Current.CurrentStateChanged += BGCurrentStateChanged; BackgroundMediaPlayer.MessageReceivedFromForeground += MessageReceivedFromForeground; //taskInstance.Task.Progress += HandleTaskProgress; if (foregroundTaskStatus != ForegroundTaskStatus.Suspended) { ValueSet message = new ValueSet(); message.Add(AppConstants.BackgroundTaskStarted, ""); BackgroundMediaPlayer.SendMessageToForeground(message); } backgroundTaskStarted.Set(); backgroundTaskStatus = true; ApplicationSettingsHelper.SaveSettingsValue(AppConstants.BackgroundTaskState, AppConstants.BackgroundTaskRunning); shutdown = false; deferral = taskInstance.GetDeferral(); }
private async void MessageReceivedFromForeground(object sender, MediaPlayerDataReceivedEventArgs e) { foreach (string key in e.Data.Keys) { switch (key.ToLower()) { case AppConstants.StartPlayback: await nowPlayingManager.PlaySong(Int32.Parse(e.Data.Where(z => z.Key.Equals(key)).FirstOrDefault().Value.ToString())); UpdateUVCOnNewTrack(); break; case AppConstants.ResumePlayback: await nowPlayingManager.ResumePlayback(); UpdateUVCOnNewTrack(); break; case AppConstants.SkipNext: await Next(); break; case AppConstants.SkipPrevious: await Previous(); break; case AppConstants.Play: Play(); break; case AppConstants.Pause: Pause(); break; case AppConstants.AppResumed: foregroundTaskStatus = ForegroundTaskStatus.Active; nowPlayingManager.CompleteUpdate(); break; case AppConstants.AppSuspended: foregroundTaskStatus = ForegroundTaskStatus.Suspended; //ApplicationSettingsHelper.SaveSettingsValue(Constants.SongId, nowPlayingManager.GetCurrentSongId()); break; case AppConstants.NowPlayingListChanged: //nowPlayingManager.UpdateNowPlayingList(); nowPlayingManager.LoadPlaylist(); break; case AppConstants.Repeat: nowPlayingManager.ChangeRepeat(); break; case AppConstants.Shuffle: nowPlayingManager.ChangeShuffle(); break; case AppConstants.Position: BackgroundMediaPlayer.Current.Position = TimeSpan.Parse(e.Data.Where(z => z.Key.Equals(key)).FirstOrDefault().Value.ToString()); break; case AppConstants.NowPlayingListSorted: //nowPlayingManager.UpdateNowPlayingList2(); nowPlayingManager.LoadPlaylist(); break; case AppConstants.SetTimer: SetTimer(); break; case AppConstants.CancelTimer: TimerCancel(); break; case AppConstants.ShutdownBGPlayer: ShutdownPlayer(); //ClearPlayer(); break; case AppConstants.ChangeRate: nowPlayingManager.ChangeRate(Int32.Parse(e.Data.Where(z => z.Key.Equals(key)).FirstOrDefault().Value.ToString())); break; case AppConstants.UpdateUVC: UpdateUVCOnNewTrack(); break; case AppConstants.NowPlayingListRefresh: string p = ""; try { p = e.Data.Where(z => z.Key.Equals(key)).FirstOrDefault().Value.ToString(); string[] s = p.Split(new string[] { "!@#$" }, StringSplitOptions.None); //s[2](artist) can equal "" nowPlayingManager.UpdateSong(Int32.Parse(s[0]), s[1], s[2]); UpdateUVCOnNewTrack(); } catch (Exception ex) { NextPlayerDataLayer.Diagnostics.Logger.SaveBG("NowPlayingListRefresh" + Environment.NewLine + p + Environment.NewLine + ex.Message); NextPlayerDataLayer.Diagnostics.Logger.SaveToFileBG(); } break; } } }