2016-04-23 17 views
2

Ich habe einen Musik-Player für Windows Phone 8.1 entwickelt. Wenn ich auf die Schaltfläche zum Abspielen der Vordergrund-App geklickt habe, wird die Nachricht an die Hintergrund-Audioklasse gesendet. Hintergrund-Audio-Klasse spielt meine Musik. Alles ist ok. Aber ich habe ein Problem. Wenn ich meine App schließe (Zurück-Taste drücken und nach unten rutschen), spielt die Hintergrundmusik immer noch. Wie kann ich es schließen? Vielen Dank.Windows Phone 8.1 Hintergrund Tasking hört nicht auf?

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();   
    } 

Antwort

0

This article beschreibt den Anwendungslebenszyklus einer Windows Store App.

Wenn Sie bei der ersten Figur anschaut, kann man sehen, dass es nur drei Ereignisse Application Lifecycle bezogen werden:

Aktiviert - Wird ausgelöst, wenn Programm zuerst Abgehängte beginnt - Wird ausgelöst, wenn Programm unterbrochen wird (dh der Benutzer kehrt zum Startbildschirm oder einer anderen App zurück) Fortsetzen - Wird ausgelöst, wenn das Programm aus dem Status "Ausgesetzt" erwacht. Der vierte Übergang - der Status "Nicht ausgeführt" - hat kein solches Benachrichtigungsereignis. Der Grund ist: Sie wissen nicht wirklich, wann die App vollständig geschlossen wird. Sie sollten auch nicht - Microsoft möchte, dass Sie beim Übergang von "Running" zu "Suspended" all Ihre State-Saving-Logik ausführen. Auf diese Weise können sie Ressourcen freigeben, wenn sie dies für notwendig erachten.

Selbst wenn der Benutzer das Programm zum Beenden zwingt (indem Sie mit der rechten Maustaste darauf klicken und im Taskmenü "Schließen" wählen), werden Sie den Status "Suspended" genau 10 Sekunden lang eingeben, bevor das Programm beendet wird. So können Sie beruhigt sein, dass Ihre State-Saving-Logik immer ausgeführt wird.

So können Sie Musik in App Suspending Ereignis oder State speichern Ereignis schließen.