コード例 #1
0
        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();
        }
コード例 #2
0
        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;
                }
            }
        }