2016-04-23 22 views
2

私はWindows Phone 8.1の音楽プレーヤーを設計しました。私が再生ボタンをクリックすると、フォアグラウンドアプリケーションはバックグラウンドオーディオクラスにメッセージを送信します。バックグラウンドオーディオクラスは私の音楽を演奏します。大丈夫。しかし、私は問題があります。私のアプリを閉じると(バックボタンを押してスライドさせると)バックグラウンドミュージックはまだ再生されています。どのように私はそれを閉じることができますか?ありがとう。Windows Phone 8.1バックグラウンドタスクが停止していませんか?

public void Run(IBackgroundTaskInstance taskInstance) 
    { 
     Debug.WriteLine("Background Audio Task " + taskInstance.Task.Name + " starting..."); 
     // Initialize SMTC object to talk with UVC. 
     //Note that, this is intended to run after app is paused and 
     //hence all the logic must be written to run in background process 
     systemmediatransportcontrol = SystemMediaTransportControls.GetForCurrentView(); 
     systemmediatransportcontrol.ButtonPressed += systemmediatransportcontrol_ButtonPressed; 
     systemmediatransportcontrol.PropertyChanged += systemmediatransportcontrol_PropertyChanged; 
     systemmediatransportcontrol.IsEnabled = true; 
     systemmediatransportcontrol.IsPauseEnabled = true; 
     systemmediatransportcontrol.IsPlayEnabled = true; 
     systemmediatransportcontrol.IsNextEnabled = true; 
     systemmediatransportcontrol.IsPreviousEnabled = true; 

     // Associate a cancellation and completed handlers with the background task. 
     taskInstance.Canceled += new BackgroundTaskCanceledEventHandler(OnCanceled); 
     taskInstance.Task.Completed += Taskcompleted; 

     var value = ApplicationSettingsHelper.ReadResetSettingsValue(Constants.AppState); 
     if (value == null) 
      foregroundAppState = ForegroundAppStatus.Unknown; 
     else 
      foregroundAppState = (ForegroundAppStatus)Enum.Parse(typeof(ForegroundAppStatus), value.ToString()); 

     //Add handlers for MediaPlayer 
     BackgroundMediaPlayer.Current.CurrentStateChanged += Current_CurrentStateChanged; 

     //Add handlers for playlist trackchanged 
     Playlist.TrackChanged += playList_TrackChanged; 

     //Initialize message channel 
     BackgroundMediaPlayer.MessageReceivedFromForeground += BackgroundMediaPlayer_MessageReceivedFromForeground; 

     //Send information to foreground that background task has been started if app is active 
     if (foregroundAppState != ForegroundAppStatus.Suspended) 
     { 
      ValueSet message = new ValueSet(); 
      message.Add(Constants.BackgroundTaskStarted, ""); 
      BackgroundMediaPlayer.SendMessageToForeground(message); 
     } 
     BackgroundTaskStarted.Set(); 
     backgroundtaskrunning = true; 

     ApplicationSettingsHelper.SaveSettingsValue(Constants.BackgroundTaskState, Constants.BackgroundTaskRunning); 
     deferral = taskInstance.GetDeferral();   
    } 

答えて

0

This articleは、Windowsストアアプリケーションのアプリケーションライフサイクルを記述します。

あなたは非常に最初の図を見れば、あなたはアプリケーションのライフサイクルに関連する唯一の3つのイベントがあることがわかります。

が活性化 - プログラムが最初に起動したときに発生 が一時停止 - プログラムが中断された場合に発生(ユーザーすなわち開始画面または別のアプリに戻ります) 再開 - プログラムが中断状態から復帰すると発生します。 第4の遷移 - 「実行していない」状態への遷移 - そのような通知イベントはありません。理由は、アプリがいつ完全に終了するかわからないからです。また、Microsoftは、「実行中」から「中断中」に移行する際に、すべての状態を保存するロジックを実行する必要もありません。このようにして、彼らは必要と思われるときにリソースを解放することができます。

ユーザーがプログラムを強制終了しても(右クリックしてタスクメニューから「閉じる」を選択しても)、プログラムが終了する前の10秒間、「中断」状態になります。したがって、安心して自分の状態を保存するロジックが常に実行されるようにすることができます。

したがって、App Suspendingイベントまたは状態保存イベントで音楽を閉じることができます。

関連する問題