Gerätesynchronisierung und -update für Store-Geräte-Apps in Windows 8.1

In Windows 8.1 kann Ihre UWP-App eine Hintergrundaufgabe für Geräte verwenden, um Daten auf Ihrem Peripheriegerät zu synchronisieren. Wenn Ihre App Gerätemetadaten zugeordnet ist, kann diese UWP-Geräte-App auch einen Gerätehintergrund-Agent verwenden, um Geräteupdates auszuführen, z. B. Firmwareupdates. Hintergrundagenten für Geräte unterliegen Richtlinien, die die Zustimmung des Benutzers sicherstellen und dazu beitragen, die Akkulaufzeit zu verlängern, während Geräte synchronisiert und aktualisiert werden.

Um Gerätesynchronisierungs- und Aktualisierungsvorgänge auszuführen, erstellen Sie eine Gerätehintergrundaufgabe, die den DeviceUseTrigger bzw . DeviceServicingTrigger verwendet. Informationen dazu, wie dies mit dem Beispiel für ein benutzerdefiniertes USB-Gerät geschieht, finden Sie unter Hintergrundaufgabe für ein Gerät erstellen.

Hinweis

Windows-Runtime Geräte-APIs erfordern keine Gerätemetadaten. Dies bedeutet, dass Ihre App keine UWP-Geräte-App sein muss, um sie zu verwenden. UWP-Apps können diese APIs für den Zugriff auf USB, Human Interface Devices (HID), Bluetooth-Geräte und vieles mehr verwenden. Weitere Informationen finden Sie unter Integrieren von Geräten.

Übersicht über die Hintergrundaufgaben des Geräts

Wenn Benutzer Ihre UWP-App vom Bildschirm verschieben, hält Windows Ihre App im Arbeitsspeicher an. Auf diese Weise kann eine andere App den Vordergrund haben. Wenn eine App angehalten wird, befindet sie sich im Arbeitsspeicher, und Windows hat die Ausführung beendet. In diesem Fall werden alle laufenden Gerätevorgänge wie Synchronisierung und Aktualisierung ohne Hilfe einer Gerätehintergrundaufgabe unterbrochen. Windows 8.1 bietet zwei neue Auslöser für Hintergrundaufgaben, mit denen Ihre App lang laufende Synchronisierungs- und Aktualisierungsvorgänge auf Ihrem Peripheriegerät sicher im Hintergrund ausführen kann, selbst wenn Ihre App angehalten ist: DeviceUseTrigger und DeviceServicingTrigger. Weitere Informationen zum Anhalten der App finden Sie unter Starten, Fortsetzen und Multitasking.

Auslöser der Hintergrundaufgabe Erfordert Gerätemetadaten Beschreibung
DeviceUseTrigger Nein Ermöglicht lange ausgeführte Synchronisierungsvorgänge mit oder von Ihrem Peripheriegerät, während Ihre App angehalten ist. Wenn Sie Ihr Gerät im Hintergrund synchronisieren, muss der Benutzer die Synchronisierung im Hintergrund von Ihrer App genehmigt haben. Ihr Gerät muss außerdem mit aktivem I/O an den PC angeschlossen oder mit diesem gekoppelt sein und darf maximal 10 Minuten im Hintergrund aktiv sein. Weitere Details zur Richtlinienerzwingung finden Sie weiter unten in diesem Thema.
DeviceServicingTrigger Ja Ermöglicht Geräteaktualisierungen mit langer Laufzeit, beispielsweise Einstellungsübertragungen oder Firmware-Updates, während Ihre App angehalten ist. Wenn Sie Ihr Gerät im Hintergrund aktualisieren, muss die Benutzergenehmigung jedes Mal genehmigt werden, wenn die Hintergrundaufgabe verwendet wird. Im Gegensatz zur DeviceUseTrigger-Hintergrundaufgabe ermöglicht die DeviceServicingTrigger-Hintergrundaufgabe den Geräteneustart und die Trennung und ermöglicht maximal 30 Minuten Hintergrundaktivität. Weitere Details zur Richtlinienerzwingung finden Sie weiter unten in diesem Thema.

DeviceServicingTrigger erfordert Gerätemetadaten, da die App als privilegierte App angegeben werden muss, um Geräteaktualisierungsvorgänge auszuführen.

App-Berechtigungen

Einige wichtige Gerätevorgänge, z. B. lange ausgeführte Geräteupdates, können nur von einer privilegierten App ausgeführt werden. Eine privilegierte App ist die App, die der Gerätehersteller zum Ausführen dieser Vorgänge autorisiert hat. Die Gerätemetadaten geben an, welche App (falls vorhanden) als privilegierte App für ein Gerät festgelegt wurde.

Geben Sie beim Erstellen der Gerätemetadaten mit dem Gerätemetadaten-Assistenten Ihre App auf der Seite UWP-Geräte-App-Informationen angeben an. Weitere Informationen finden Sie in Schritt 2: Erstellen von Gerätemetadaten für Ihre UWP-Geräte-App.

Unterstützte Protokolle

Gerätehintergrundaufgaben, die DeviceUseTrigger und DeviceServicingTrigger verwenden, ermöglichen Ihrer App die Kommunikation mit Peripheriegeräten über Protokolle, die von den vom System ausgelösten Aufgaben, die normalerweise von UWP-Apps verwendet werden, nicht unterstützt werden.

Protokoll DeviceServicingTrigger DeviceUseTrigger Systemtrigger
USB deviceservicingtrigger supports usb. deviceusetrigger supports usb system triggers do not support usb
HID deviceservicingtrigger supports hid. deviceusetrigger supports hid system triggers do not support hid
Bluetooth (RFCOMM) deviceservicingtrigger supports bluetooth rfcomm. deviceusetrigger supports bluetooth rfcomm system triggers do not support bluetooth rfcomm
Bluetooth GATT deviceservicingtrigger supports bluetooth gatt. deviceusetrigger supports bluetooth gatt system triggers do not support bluetooth gatt
MTP deviceservicingtrigger supports mtp. deviceusetrigger does not support mtp system triggers do not support mtp
Netzwerk verkabelt deviceservicingtrigger supports network wired. deviceusetrigger does not support network wired system triggers do not support network wired
Netzwerk-WLAN deviceservicingtrigger supports networked wi-fi. deviceusetrigger does not support networked wi-fi system triggers do not support network wi-fi
IDeviceIOControl deviceservicingtrigger supports ideviceiocontrol. deviceusetrigger does not support ideviceiocontrol system triggers do not support ideviceiocontrol

Registrieren von Hintergrundaufgaben im App-Paketmanifest

Ihre App führt Synchronisierungs- und Aktualisierungsvorgänge in Code aus, der als Teil einer Hintergrundaufgabe ausgeführt wird. Dieser Code ist in eine Windows-Runtime Klasse eingebettet, die IBackgroundTask implementiert (oder auf einer dedizierten JavaScript-Seite für JavaScript-Apps). Um eine Gerätehintergrundaufgabe zu verwenden, muss Sie sie in der App-Manifestdatei einer Vordergrund-App deklarieren, z. B. für vom System ausgelöste Hintergrundaufgaben.

In diesem Beispiel einer App-Paketmanifestdatei sind DeviceLibrary.SyncContent und DeviceLibrary.UpdateFirmware Einstiegspunkte aus der Vordergrund-App. DeviceLibrary.SyncContent ist der Einstiegspunkt für die Hintergrundaufgabe, die DeviceServicingTriggerverwendet. DeviceLibrary.UpdateFirmware ist der Einstiegspunkt für die Hintergrundaufgabe, die DeviceServicingTriggerverwendet.

<Extensions>
  <Extension Category="windows.backgroundTasks" EntryPoint="DeviceLibrary.SyncContent">
    <BackgroundTasks>
      <m2:Task Type="deviceUse" /> 
    </BackgroundTasks>
  </Extension>
  <Extension Category="windows.backgroundTasks" EntryPoint="DeviceLibrary.UpdateFirmware">
    <BackgroundTasks>
      <m2:Task Type="deviceServicing" /> 
    </BackgroundTasks>
  </Extension>
</Extensions>

Verwenden Ihres Geräts mit Hintergrundaufgaben für Geräte

Um Ihre App so zu entwickeln, dass sie die Hintergrundaufgaben DeviceUseTrigger und DeviceServicingTrigger nutzt, befolgen Sie diese grundlegenden Schritte. Weitere Informationen zu Hintergrundaufgaben finden Sie unter Unterstützen Ihrer App mit Hintergrundaufgaben.

  1. Ihre App registriert ihre Hintergrundaufgabe im App-Manifest und bettet den Hintergrundaufgabencode in eine Windows-Runtime-Klasse ein, die IBackgroundTask implementiert, oder in eine dedizierte JavaScript-Seite für JavaScript-Apps.

  2. Wenn Ihre App gestartet wird, erstellt und konfiguriert sie ein Gerätetriggerobjekt des entsprechenden Typs, entweder DeviceUseTrigger oder DeviceServicingTrigger, und speichert die Triggerinstanz für die zukünftige Verwendung.

  3. Ihre App prüft, ob die Hintergrundaufgabe zuvor registriert wurde, und registriert sie, falls nicht, beim Gerätetrigger. Beachten Sie, dass Ihre App keine Bedingungen für die aufgabe festlegen darf, die diesem Trigger zugeordnet ist.

  4. Wenn Ihre App die Hintergrundaufgabe auslösen muss, ruft sie die RequestAsync-Aktivierungsmethode für das Gerätetriggerobjekt auf.

  5. Ihre Hintergrundaufgabe wird nicht wie andere Hintergrundaufgaben des Systems gedrosselt (es gibt kein CPU-Zeitkontingent), sondern wird mit reduzierter Priorität ausgeführt, um die Reaktionsfähigkeit der Vordergrund-Apps aufrechtzuerhalten.

  6. Windows überprüft dann basierend auf dem Triggertyp, dass die erforderlichen Richtlinien erfüllt wurden, einschließlich der Anforderung der Benutzerzustimmung für den Vorgang, bevor die Hintergrundaufgabe gestartet wird.

  7. Windows überwacht die Systembedingungen und die Laufzeit der Aufgabe und bricht die Aufgabe gegebenenfalls ab, wenn die erforderlichen Bedingungen nicht mehr erfüllt sind.

  8. Wenn die Hintergrundaufgaben den Fortschritt oder Abschluss melden, empfängt Ihre App diese Ereignisse über Fortschritts- und abgeschlossene Ereignisse für die registrierte Aufgabe.

Wichtige Punkte, die Sie bei der Verwendung der Hintergrundaufgaben des Geräts berücksichtigen sollten

  • Die Möglichkeit, Hintergrundaufgaben programmgesteuert auszulösen, die DeviceUseTrigger und DeviceServicingTrigger verwenden, wurde in Windows 8.1 eingeführt und ist nur auf Gerätehintergrundaufgaben beschränkt.

  • Bestimmte Richtlinien werden von Windows erzwungen, um die Zustimmung des Benutzers beim Aktualisieren seiner Peripheriegeräte sicherzustellen. Es werden zusätzliche Richtlinien durchgesetzt, um die Akkulaufzeit des Benutzers beim Synchronisieren und Aktualisieren von Peripheriegeräten zu verlängern.

  • Hintergrundaufgaben, die DeviceUseTrigger und DeviceServicingTrigger verwenden, werden möglicherweise von Windows abgebrochen, wenn bestimmte Richtlinienanforderungen, einschließlich einer maximalen Hintergrundzeit (Wanduhrzeit), nicht mehr erfüllt sind. Es ist wichtig, diese Richtlinienanforderungen zu berücksichtigen, wenn Sie diese Hintergrundaufgaben für die Interaktion mit Ihrem Peripheriegerät verwenden.

Tipp

Um zu sehen, wie diese Hintergrundaufgaben funktionieren, laden Sie ein Beispiel herunter. Das Beispiel für ein benutzerdefiniertes USB-Gerät zeigt eine Hintergrundaufgabe, die eine Gerätesynchronisierung mit DeviceUseTrigger durchführt.

Bei Verwendung von DeviceUseTrigger oder DeviceServicingTrigger erzwingt Windows 8.1 Richtlinien, um sicherzustellen, dass der Benutzer Ihrer App die Berechtigung erteilt hat, im Hintergrund auf sein Gerät zuzugreifen, um Inhalte zu synchronisieren und zu aktualisieren. Richtlinien werden auch erzwungen, um die Akkulaufzeit des Benutzers beim Synchronisieren und Aktualisieren von Peripheriegeräten zu erhalten.

Eine Hintergrundaufgabe, die DeviceUseTrigger verwendet, erfordert eine einmalige Benutzerzustimmung, mit der Ihre App im Hintergrund synchronisiert werden kann. Diese Einwilligung wird pro App und Gerätemodell gespeichert. Der Benutzer stimmt zu, dass die App im Hintergrund auf das Gerät zugreifen darf, ebenso wie er zustimmt, dass die App auf das Gerät zugreifen darf, wenn die App im Vordergrund läuft.

Im folgenden Beispiel erhält eine App mit dem Namen Tailspin Toys die Benutzerberechtigung für die Synchronisierung im Hintergrund.

device sync user consent message dialog.

Wenn Benutzer ihre Meinung später ändern, können sie Berechtigungen in Einstellungen widerrufen.

device sync permissions setting dialog.

Im Gegensatz zu denen, die DeviceUseTrigger verwenden, erfordern Hintergrundaufgaben, die die Hintergrundaufgabe DeviceServicingTrigger verwenden, jedes Mal die Zustimmung des Benutzers, wenn die Hintergrundaufgabe ausgelöst wird. Und diese Zustimmung wird nicht gespeichert, wie sie es für DeviceUseTrigger ist. Dies liegt an den Vorgängen mit höherem Risiko, die mit Gerätefirmwareupdates verbunden sind, und der längeren Zeit, die für Geräteupdates erforderlich ist. Neben der Einholung der Benutzereinwilligung stellt Windows den Benutzern auch Informationen zu Geräteaktualisierungen zur Verfügung, z. B. eine Warnung, das Gerät während des Updates angeschlossen zu lassen und sicherzustellen, dass der PC aufgeladen ist, sowie die ungefähre Laufzeit des Vorgangs (sofern Ihre App dies bereitstellt).

device update user consent message dialog.

Einschränkungen für Häufigkeit und Vordergrund

Es gibt keine Einschränkung der Häufigkeit, mit der Ihre App Vorgänge initiieren kann, aber Ihre App kann jeweils nur einen DeviceUseTrigger- oder DeviceServicingTrigger-Hintergrundaufgabenvorgang ausführen (dies wirkt sich nicht auf andere Arten von Hintergrundaufgaben aus), und kann eine Hintergrundaufgabe nur initiieren, während sich Ihre App im Vordergrund befindet. Wenn sich Ihre App nicht im Vordergrund befindet, kann sie keine Hintergrundaufgabe mit DeviceUseTrigger oder DeviceServicingTrigger initiieren. Ihre App kann keine zweite Gerätehintergrundaufgabe initiieren, bevor die erste Hintergrundaufgabe abgeschlossen wurde.

Richtlinien für Hintergrundaufgaben des Geräts

Windows erzwingt Richtlinien, wenn Ihre App eine Hintergrundaufgabe für Geräte verwendet. Wenn diese Richtlinien nicht erfüllt sind, wird die Hintergrundaufgabe mit DeviceUseTrigger oder DeviceServicingTrigger möglicherweise abgebrochen. Es ist wichtig, diese Richtlinienanforderungen zu berücksichtigen, wenn Sie Gerätehintergrundaufgaben für die Interaktion mit Ihrem Peripheriegerät verwenden.

Richtlinien für die Aufgabeninitiierung

Diese Tabelle gibt an, welche Aufgabeninitiierungsrichtlinien für jeden Hintergrundaufgabentrigger gelten.

Policy DeviceServicingTrigger DeviceUseTrigger
Ihre UWP-App befindet sich beim Auslösen der Hintergrundaufgabe im Vordergrund. policy applies. policy applies
Ihr Gerät ist an das System angeschlossen (oder in Reichweite für ein wireless Gerät). policy applies. policy applies
Ihre Hintergrundaufgabe verbraucht jede Minute 400 ms CPU-Zeit (bei einer 1-GHz-CPU), wenn der Bildschirm gesperrt ist, oder alle 5 Minuten, wenn der Bildschirm nicht gesperrt ist. Wenn diese Richtlinie nicht erfüllt wird, kann dies zu einem Abbruch Ihrer Aufgabe führen. policy applies. policy applies
Auf Ihr Gerät kann über die Geräteperipherie-APIs (die Windows-Runtime-APIs für USB, HID, Bluetooth usw.) für die App zugegriffen werden. Wenn Ihre App nicht auf das Gerät zugreifen kann, wird der Zugriff auf die Hintergrundaufgaben verweigert. policy applies. policy applies
Der Einstiegspunkt der Hintergrundaufgabe, der von der App bereitgestellt wird, wird im App-Paketmanifest registriert. policy applies. policy applies
Der Benutzer hat der Aufgabe die Berechtigung zum Fortsetzen erteilt. Jedes Mal. Zum ersten Mal, dann durch App-Berechtigungen gesteuert.
Die von der App bereitgestellte Zeitschätzung beträgt weniger als 30 Minuten. policy applies. policy does not apply
Die App wird als privilegierte App für das Gerät angegeben. (Es muss eine vollständige App-ID mit der Liste der privilegierten Apps in den Gerätemetadaten des Gerätecontainers übereinstimmen.) policy applies. policy does not apply
Der Computer verfügt über eine verbleibende Akkukapazität von mehr als 33 % oder wird mit Wechselstrom betrieben. policy applies. policy does not apply
Pro Vorgangstyp wird nur eine Hintergrundaufgabe für Geräte ausgeführt. policy check applies. policy applies

Laufzeitrichtlinienüberprüfungen

Windows erzwingt die folgenden Laufzeitrichtlinienanforderungen, während Ihre Aufgabe im Hintergrund ausgeführt wird. Wenn einer der Laufzeitanforderungen nicht mehr zutrifft, bricht Windows die Hintergrundaufgabe des Geräts ab.

Diese Tabelle gibt an, welche Laufzeitrichtlinien für jeden Hintergrundaufgabenauslöser gelten.

Richtlinienprüfung DeviceServicingTrigger DeviceUseTrigger
Zeitlimit für die Wanduhr – die Gesamtdauer der Ausführung der App-Aufgabe im Hintergrund. 30 Minuten 10 Minuten
Ihr Gerät ist an das System angeschlossen (oder in Reichweite für ein wireless Gerät). policy does not apply. policy check applies
Die Aufgabe führt normale E/A-Vorgänge auf dem Gerät aus (1 E/A alle 5 Sekunden). policy does not apply. policy check applies
Die App hat die Aufgabe nicht abgebrochen. policy check applies. policy check applies
Die App wurde nicht beendet. policy check applies. policy check applies

Bewährte Methoden

Im Folgenden sind bewährte Methoden für UWP-Geräte-Apps aufgeführt, die die Hintergrundaufgaben des Geräts verwenden.

Programmiermodell für Gerätehintergrundaufgaben

Durch die Verwendung der Hintergrundaufgaben „DeviceUseTrigger“ oder „DeviceServicingTrigger“ aus Ihrer App wird sichergestellt, dass alle von Ihrer Vordergrund-App gestarteten Synchronisierungs- oder Geräteaktualisierungsvorgänge weiterhin im Hintergrund ausgeführt werden, wenn Ihre Benutzer Apps wechseln und Ihre Vordergrund-App von Windows angehalten wird. Es wird empfohlen, dieses allgemeine Modell zum Registrieren, Auslösen und Aufheben der Registrierung Ihrer Hintergrundaufgaben zu befolgen:

  1. Registrieren Sie die Hintergrundaufgabe, bevor Sie den Trigger anfordern.

  2. Verbinden Status- und Abschlussereignishandler an den Trigger. Wenn Ihre App vom Anhalten zurückkehrt, stellt Windows Ihrer App alle Status- oder Abschlussereignisse in der Warteschlange bereit, die verwendet werden können, um den Status Ihrer Hintergrundaufgaben zu bestimmen.

  3. Schließen Sie alle geöffneten Geräteobjekte, wenn Sie Ihre DeviceUseTrigger- oder DeviceServicingTrigger-Hintergrundaufgaben auslösen, damit diese Geräte frei geöffnet und von Ihrer Hintergrundaufgabe verwendet werden können.

  4. Registrieren Sie den Trigger.

  5. Wenn eine Aufgabe abgeschlossen ist, heben Sie die Registrierung der Hintergrundaufgabe auf. Nach Abschluss der Hintergrundaufgabe können Sie die Registrierung der Hintergrundaufgaben aufheben und das Gerät erneut öffnen und es regelmäßig aus Ihrer UWP-App verwenden.

  6. Registrieren Sie sich für Abbruchereignisse aus der Hintergrundaufgabenklasse. Durch die Registrierung für Abbruchereignisse kann Ihr Hintergrundaufgabencode Ihre laufende Hintergrundaufgabe sauber stoppen, wenn sie von Windows oder Ihrer Vordergrund-App abgebrochen wird.

  7. Heben Sie beim Beenden der App (nicht anhaltend) die Registrierung auf, und brechen Sie alle ausgeführten Aufgaben ab.

    • Wenn Ihre App beendet wird, heben Sie die Registrierung auf, und brechen Sie alle ausgeführten Aufgaben ab.

    • Wenn Ihre App beendet wird, werden Ihre Hintergrundaufgaben abgebrochen und alle vorhandenen Ereignishandler werden von Ihren vorhandenen Hintergrundaufgaben getrennt. Dadurch wird verhindert, dass Sie den Status Ihrer Hintergrundaufgaben bestimmen. Wenn Sie die Registrierung aufheben und die Hintergrundaufgabe abbrechen, kann Ihr Abbruchcode ihre Hintergrundaufgaben sauber beenden.

Tipp

Eine ausführliche Beschreibung, wie dies mit dem Beispiel für ein benutzerdefiniertes USB-Gerät geschieht, finden Sie unter Erstellen einer Gerätehintergrundaufgabe.

Abbrechen einer Hintergrundaufgabe

Verwenden Sie zum Abbrechen einer Im Hintergrund ausgeführten Aufgabe aus der Vordergrund-App die Unregister-Methode für das BackgroundTaskRegistration-Objekt, das Sie in Ihrer App verwenden, um die Hintergrundaufgabe DeviceUseTrigger oder DeviceServicingTrigger zu registrieren. Wenn Sie die Registrierung Ihrer Hintergrundaufgabe mithilfe der Unregister-Methode für BackgroundTaskRegistration aufheben, wird die Hintergrundaufgaben-Infrastruktur Ihre Hintergrundaufgabe abbrechen.

Die Unregister-Methode verwendet zusätzlich einen booleschen True- oder False-Wert, um anzugeben, ob derzeit ausgeführte Instanzen Der Hintergrundaufgabe abgebrochen werden sollen, ohne dass sie beendet werden können. Weitere Informationen finden Sie in der API-Referenz für BackgroundTaskRegistration.Unregister.

Erstellen einer Gerätehintergrundaufgabe

Beispiel für ein benutzerdefiniertes USB-Gerät

Launching, resuming, and multitasking

Unterstützen Ihrer App bei Hintergrundaufgaben