UWP Play Background Music

Das besondere am Life Cycle Model seit Windows 8 ist, das Betriebssystem legt Store Apps im Hintergrund nach wenigen Sekunden schlafen. Aus Prozessor Sicht tun sie nichts mehr. Das aus dem Auge aus dem Sinn Prinzip funktioniert aber nur bis man so ca 2 Jahre alt ist. Dann benötigt Prozesse im Hintergrund, die auch weiterlaufen wenn Mami nicht m Raum ist. Ein Download oder Musik.

Bisher musste man diese Aufgaben in einen vom UI Task unabhängigen Task legen. Eine Klasse mit Interface IBackgroundTask. Wie bisher schon suggeriert, ist mit Windows 10 Anniversary Update (Build 14393) alles einfacher.

Doch zunächst UWP minimal Szenario mit einem Music Player. Verwirrenderweise existieren zwei Controls für das abspielen von Musik. Das MediaElement und das MediaPlayerElement (neu). Dazu existiert eine Audiograph Klasse, die aber eher der Manipulation, wie schneller abspielen oder Equalizer, dient.

Das Music Player Control liefert auch gleich seine Steuerlemente mit um den Player steuern zu können.

   1:    <MediaPlayerElement AreTransportControlsEnabled="True"
   2:              HorizontalAlignment="Left" Height="100" Margin="10,182,-90,0" 
   3:                        AutoPlay="True"
   4:                        VerticalAlignment="Top" Width="440"   Source="ms-appx:///06.mp3"
   5:                            />

 

Wechselt Benutzer nun die App, spielt die Musik weiter.

Minimiert der Benutzer die App oder geht in den Lockscreen stoppt die Musik, da die App in den Suspended Modus geht.

image

Mit UWP Projekten die in den Visual Studio Projekt Eigenschaften auf min Build 14393 gestellt sind, steht im Manifest eine neue Option zur Verfügung. Einfach die package.appxmanifest Datei öffnen und die Capability backgroundMediaPlayback setzen.,

image

Ein weiteres Problem, speziell auf mobilen Devices ist, das die Geräte sich selbst schlafen legen bzw. in den Lock Screen wechseln. Das wäre für eine Kiosk App eher unpassend. Das kann mit folgenden VB.NET Code verhindern.

   1:   Dim _displayRequest = New Windows.System.Display.DisplayRequest()
   2:  _displayRequest.RequestActive()

Die MSDN Doku gibt zwar noch ein paar Details mehr dazu, ist aber eher verwirrend formuliert.

Kommentare sind geschlossen