© DrHitch/Shutterstock.com
Windows Phone 8.1

3 Background Agents für Windows Phone


Auf der Windows-Phone-Plattform kann immer nur eine App aktiv im Vordergrund ausgeführt werden. Alle im Hintergrund befindlichen Apps werden gestoppt. Die folgenden beiden Kapitel sollen einen Überblick über die Ausnahmen und Möglichkeiten geben, um Aufgaben im Hintergrund auszuführen.

Unter Windows Phone ist es nicht möglich, mehrere Apps gleichzeitig laufen zu lassen. Es kann immer jeweils nur eine App im Vordergrund ausgeführt werden. Eine der wenigen Ausnahmen bilden Apps, die im Hintergrund Positionsdaten verarbeiten. Der Grund für diese Einschränkung liegt in den knappen Ressourcen auf einem mobilen Gerät. Jede Anwendung, die im Hintergrund weiterläuft, verbraucht Prozessor-, Speicher- und Akkuressourcen. Um eine möglichst lange Laufzeit zu ermöglichen, wurde die Option zum Ausführen von Aufgaben im Hintergrund auf so genannte Hintergrundagenten (engl. Background Agents) beschränkt.

Auf der Windows-Phone-8.1-Plattform gibt es zwei Möglichkeiten zur Entwicklung von Hintergrundaufgaben. Wie unter Windows Phone 8.0 stehen weiterhin die Background Agents in einem Silverlight-für-Windows-Phone-Projekt zur Verfügung. Dazu gekommen sind die Background Tasks in einem Windows-Runtime-(WinRT)- und/oder Universal-App-Projekt.

In diesem Kapitel wird es um Alarme, Erinnerungen, benutzerdefinierte Agenten sowie Hintergrundaudio gehen, im folgenden Kapitel um Dateiübertragungen und Location Tracking im Hintergrund sowie die neuen BackgroundTasks der Windows-Phone-8.1-Plattform. Die Quellcodes zu diesem Kapitel finden Sie unter [1].

Background Agents (Windows Phone 8 und 8.1)

Auf der Silverlight-für-Windows-Phone-Plattform kann eine Aktion zu einem bestimmten Zeitpunkt ausgeführt werden. Alle diese Aktionen leiten sich von der Basisklasse ScheduledAction ab, die sich in die zwei Gruppen ScheduledNotification (Benachrichtigungen) und ScheduledTask (Aufgaben) unterteilt (Abb. 3.1). Die ScheduledNotifications unterteilen sich wiederum in Reminder (Erinnerung) und Alarm (Wecker). Eine ScheduledTask ist entweder eine PeriodicTask oder eine ResourceIntensiveTask.

3_fischer_background_1.png

Abb. 3.1: Übersicht über die Basisklasse „ScheduledAction“

Alarme und Erinnerungen

Die einfachste Möglichkeit zur Erstellung einer Hintergrundaufgabe ist die Verwendung einer Erinnerung (Reminder) oder eines Weckers (Alarm) – siehe Beispielprojekt „01 Notifications“ [1]. Um eine Erinnerung zu erstellen, legen Sie zunächst eine Klasse Reminder mit einem eindeutigen Namen an. Anschließend können Sie den Zeitpunkt festlegen, an dem Sie die Erinnerung in Form einer Toast Notification erhalten möchten, Sie können bestimmen, wie lange die Erinnerung gültig sein soll, wie oft die Erinnerung wiederholt werden soll sowie ggf. einen DeepLink in Ihre App integrieren, der geöffnet wird, wenn der Benutzer auf die Toast Notification tippt. Nachdem Sie alles konfiguriert haben, fügen Sie die ScheduledNotification mithilfe des ScheduledActionService hinzu:

Reminder myReminder = new Reminder("myFirstReminder") {
BeginTime = DateTime.Now + TimeSpan.FromMinutes(5),
ExpirationTime = DateTime.Now + TimeSpan.FromDays(2),
RecurrenceType = RecurrenceInterval.Daily,
NavigationUri = new Uri("/ReminderPage.xaml?from=myReminder")
};
ScheduledActionService.Add(myReminder);

Auf die gleiche Weise lässt sich alternativ auch ein Alarm erstellen. Der Unterscheid zwischen einer Erinnerung und einem Alarm liegt im Wesentlichen darin, dass Sie bei einem Alarm keinen DeepLink in Ihre App, dafür aber einen eigenen Sound angeben können. Die Sounddatei muss sich dabei als Ressource oder Content innerhalb ihrer App befinden:

Alarm myAlarm = new Alarm("myAlarm") {
Content = "Mein Alarm",
BeginTime = DateTime.Now + TimeSpan.FromMinutes(5),
ExpirationTime = DateTime.Now + TimeSpan.FromDays(2),
RecurrenceType = RecurrenceInterval.Daily,
Sound = new Uri("/Assembly;component/dir/alarm.mp3", UriKind.Relative)
};
ScheduledActionService.Add(myAlarm);

Eine App kann die von Ihnen angelegten Alarme und Erinnerungen mithilfe der Klasse ScheduledActionService verwalten. Die generische Methode GetAction kann alle bereits angelegten Alarme oder Erinnerungen abrufen. Alternativ können einzelne Notifications mithilfe ihres Namens gefunden werden. Dabei ist allerdings zu beachten, dass diese Funktion die Basisklasse ScheduledNotification zurückgibt:

// Abrufen aller Alarme
var alarms = ScheduledActionService.GetActions<Alarm>();
// Finden eines einzelnen Alarms
var alarm = ScheduledActionService.Find("myAlarm");
// Ersetzen eines einzelnen Al...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang