Zugreifen auf Sensoren und Geräte von einer Hintergrundaufgabe aus

Mit DeviceUseTrigger kann Ihre universelle Windows-App im Hintergrund auf Sensoren und Peripheriegeräte zugreifen. Dies ist selbst dann möglich, wenn die Vordergrund-App angehalten wird. Je nachdem, wo Ihre App ausgeführt wird, kann sie beispielsweise eine Hintergrundaufgabe verwenden, um Daten mit Geräten zu synchronisieren oder Sensoren zu überwachen. Um die Akkulaufzeit zu erhalten und die entsprechende Zustimmung des Benutzers sicherzustellen, unterliegt die Verwendung von DeviceUseTrigger richtlinien, die in diesem Thema beschrieben werden.

Um auf Sensoren oder Peripheriegeräte im Hintergrund zuzugreifen, erstellen Sie eine Hintergrundaufgabe, die deviceUseTrigger verwendet. Ein Beispiel, das zeigt, wie dies auf einem PC erfolgt, finden Sie im Beispiel für ein benutzerdefiniertes USB-Gerät. Ein Beispiel auf einem Smartphone finden Sie im Beispiel für Hintergrundsensoren.

Wichtig

DeviceUseTrigger kann nicht mit In-Process-Hintergrundaufgaben verwendet werden. Die Informationen in diesem Thema gelten nur für Hintergrundaufgaben, die außerhalb des Prozesses ausgeführt werden.

Übersicht über die Hintergrundaufgaben des Geräts

Wenn Ihre App für den Benutzer nicht mehr sichtbar ist, wird Ihre App angehalten oder beendet, um Arbeitsspeicher und CPU-Ressourcen freizugeben. Dadurch können andere Apps im Vordergrund ausgeführt werden und reduzieren den Akkuverbrauch. In diesem Fall gehen ohne Hilfe einer Hintergrundaufgabe alle laufenden Datenereignisse verloren. Windows stellt den Hintergrundaufgabentrigger DeviceUseTrigger bereit, damit Ihre App lange ausgeführte Synchronisierungs- und Überwachungsvorgänge auf Geräten und Sensoren sicher im Hintergrund ausführen kann, auch wenn Ihre App angehalten ist. Weitere Informationen zum App-Lebenszyklus finden Sie unter Starten, Fortsetzen und Hintergrundaufgaben. Weitere Informationen zu Hintergrundaufgaben finden Sie unter "Unterstützen Ihrer App mit Hintergrundaufgaben".

Hinweis In einer universellen Windows-App erfordert die Synchronisierung eines Geräts im Hintergrund, dass der Benutzer die Synchronisierung im Hintergrund durch Ihre App genehmigt hat. Das Gerät muss auch mit dem PC verbunden oder gekoppelt werden, mit aktiver E/A und ist maximal 10 Minuten Hintergrundaktivität zulässig. Weitere Details zur Richtlinienerzwingung finden Sie weiter unten in diesem Thema.

Einschränkung: Kritische Gerätevorgänge

Einige wichtige Gerätevorgänge, z. B. lange ausgeführte Firmwareupdates, können nicht mit deviceUseTrigger ausgeführt werden. Solche Vorgänge können nur auf dem PC und nur von einer privilegierten App ausgeführt werden, die den DeviceServicingTrigger verwendet. Eine privilegierte App ist eine App , die der Hersteller des Geräts zum Ausführen dieser Vorgänge autorisiert hat. Gerätemetadaten werden verwendet, um anzugeben, welche App (falls vorhanden) als privilegierte App für ein Gerät festgelegt wurde. Weitere Informationen finden Sie unter Gerätesynchronisierung und -update für Microsoft Store-Geräte-Apps.

Protokolle/APIs, die in einer DeviceUseTrigger-Hintergrundaufgabe unterstützt werden

Hintergrundaufgaben, die DeviceUseTrigger verwenden, ermöglichen Ihrer App die Kommunikation über viele Protokolle/APIs, von denen die meisten von vom System ausgelösten Hintergrundaufgaben nicht unterstützt werden. Die folgenden Werden in einer universellen Windows-App unterstützt.

Protokoll DeviceUseTrigger in einer universellen Windows-App
USB dieses Protokoll wird unterstützt.
HID dieses Protokoll wird unterstützt.
Bluetooth (RFCOMM) dieses Protokoll wird unterstützt.
Bluetooth GATT dieses Protokoll wird unterstützt.
MTP dieses Protokoll wird unterstützt.
Netzwerk verkabelt dieses Protokoll wird unterstützt.
Netzwerk-WLAN dieses Protokoll wird unterstützt.
IDeviceIOControl deviceservicingtrigger unterstützt ideviceiocontrol
Sensor-API deviceservicingtrigger unterstützt universelle Sensoren-APIs (beschränkt auf Sensoren in der universellen Gerätefamilie)

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 DeviceUseTrigger-Hintergrundaufgabe zu verwenden, muss ihre App sie in der App-Manifestdatei einer Vordergrund-App deklarieren, z. B. für vom System ausgelöste Hintergrundaufgaben.

In diesem Beispiel einer App-Paketmanifestdatei ist DeviceLibrary.SyncContent der Einstiegspunkt für eine Hintergrundaufgabe, die deviceUseTrigger verwendet.

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

Einführung in die Verwendung von DeviceUseTrigger

Führen Sie die folgenden grundlegenden Schritte aus, um DeviceUseTrigger zu verwenden. 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, wird ein Triggerobjekt vom Typ DeviceUseTrigger erstellt und konfiguriert und die Triggerinstanz für die zukünftige Verwendung gespeichert.
  3. Ihre App überprüft, ob die Hintergrundaufgabe zuvor registriert wurde, und registriert sie ggf. für den Trigger. 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, muss sie zuerst RequestAccessAsync aufrufen, um zu überprüfen, ob die App eine Hintergrundaufgabe anfordern kann.
  5. Wenn die App die Hintergrundaufgabe anfordern kann, ruft sie die RequestAsync-Aktivierungsmethode für das Gerätetriggerobjekt auf.
  6. Ihre Hintergrundaufgabe wird nicht wie andere Systemhintergrundaufgaben gedrosselt (es gibt kein CPU-Zeitkontingent), wird jedoch mit reduzierter Priorität ausgeführt, um vordergrundfähige Apps reaktionsfähig zu halten.
  7. 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.
  8. Windows überwacht die Systembedingungen und die Laufzeit der Aufgabe und bricht die Aufgabe gegebenenfalls ab, wenn die erforderlichen Bedingungen nicht mehr erfüllt sind.
  9. Wenn die Hintergrundaufgaben den Fortschritt oder Abschluss melden, empfängt Ihre App diese Ereignisse über Fortschritts- und abgeschlossene Ereignisse für die registrierte Aufgabe.

Wichtig Beachten Sie diese wichtigen Punkte bei der Verwendung von DeviceUseTrigger:

  • Die Möglichkeit zum programmgesteuerten Auslösen von Hintergrundaufgaben, die deviceUseTrigger verwenden, wurde zuerst in Windows 8.1 und Windows Phone 8.1 eingeführt.

  • Bestimmte Richtlinien werden von Windows erzwungen, um die Zustimmung des Benutzers beim Aktualisieren von Peripheriegeräten auf dem PC 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 verwenden, werden möglicherweise von Windows abgebrochen, wenn bestimmte Richtlinienanforderungen nicht mehr erfüllt sind, einschließlich einer maximalen Hintergrundzeit (Wanduhrzeit). 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. Ein Beispiel, das zeigt, wie dies auf einem PC erfolgt, finden Sie im Beispiel für ein benutzerdefiniertes USB-Gerät. Ein Beispiel auf einem Smartphone finden Sie im Beispiel für Hintergrundsensoren.  

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-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 initiieren. Ihre App kann keine zweite DeviceUseTrigger-Hintergrundaufgabe initiieren, bevor die erste Hintergrundaufgabe abgeschlossen wurde.

Geräteeinschränkungen

Obwohl jede App auf die Registrierung und Ausführung nur einer DeviceUseTrigger-Hintergrundaufgabe beschränkt ist, kann das Gerät (auf dem Ihre App ausgeführt wird) mehrere Apps das Registrieren und Ausführen von DeviceUseTrigger-Hintergrundaufgaben ermöglichen. Je nach Gerät gibt es möglicherweise einen Grenzwert für die Gesamtanzahl der DeviceUseTrigger-Hintergrundaufgaben aus allen Apps. Dies trägt dazu bei, den Akku auf ressourcengeschränkten Geräten zu erhalten. Weitere Informationen finden Sie in der folgenden Tabelle.

Von einer einzelnen DeviceUseTrigger-Hintergrundaufgabe aus kann Ihre App auf eine unbegrenzte Anzahl von Peripheriegeräten oder Sensoren zugreifen – nur durch die unterstützten APIs und Protokolle, die in der vorherigen Tabelle aufgeführt wurden.

Richtlinien für Hintergrundaufgaben

Windows erzwingt Richtlinien, wenn Ihre App eine DeviceUseTrigger-Hintergrundaufgabe verwendet. Wenn diese Richtlinien nicht erfüllt sind, wird die Hintergrundaufgabe möglicherweise abgebrochen. Es ist wichtig, diese Richtlinienanforderungen bei Verwendung dieser Art von Hintergrundaufgabe für die Interaktion mit Geräten oder Sensoren zu berücksichtigen.

Richtlinien für die Aufgabeninitiierung

Diese Tabelle gibt an, welche Aufgabeninitiierungsrichtlinien für eine universelle Windows-App gelten.

Policy DeviceUseTrigger in einer universellen Windows-App
Ihre App befindet sich beim Auslösen der Hintergrundaufgabe im Vordergrund. Richtlinie gilt
Das Gerät ist an das System angeschlossen (oder im Bereich für ein drahtloses Gerät). Richtlinie gilt
Auf das Gerät kann über die unterstützten Geräteperipherie-APIs (die Windows-Runtime-APIs für USB, HID, Bluetooth, Sensoren usw. zugegriffen werden). Wenn Ihre App nicht auf das Gerät oder den Sensor zugreifen kann, wird der Zugriff auf die Hintergrundaufgabe verweigert. Richtlinie gilt
Der Einstiegspunkt der Hintergrundaufgabe, der von der App bereitgestellt wird, wird im App-Paketmanifest registriert. Richtlinie gilt
Pro App wird nur eine DeviceUseTrigger-Hintergrundaufgabe ausgeführt. Richtlinie gilt
Die maximale Anzahl von DeviceUseTrigger-Hintergrundaufgaben wurde noch nicht auf dem Gerät erreicht (auf dem Ihre App ausgeführt wird). Desktopgerätefamilie: Eine unbegrenzte Anzahl von Aufgaben kann registriert und parallel ausgeführt werden. Familie mobiler Geräte: 1 Aufgabe auf einem 512 MB-Gerät; andernfalls können 2 Aufgaben registriert und parallel ausgeführt werden.
Die maximale Anzahl von Peripheriegeräten oder Sensoren, auf die Ihre App über eine einzelne DeviceUseTrigger-Hintergrundaufgabe zugreifen kann, wenn Sie die unterstützten APIs/Protokolle verwenden. Unbegrenzt
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. Richtlinie gilt

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 eine universelle Windows-App gelten.

Richtlinienprüfung DeviceUseTrigger in einer universellen Windows-App
Das Gerät ist an das System angeschlossen (oder im Bereich für ein drahtloses Gerät). Die Richtlinienüberprüfung gilt
Die Aufgabe führt normale E/A-Vorgänge auf dem Gerät aus (1 E/A alle 5 Sekunden). Die Richtlinienüberprüfung gilt
Die App hat die Aufgabe nicht abgebrochen. Die Richtlinienüberprüfung gilt
Zeitlimit für die Wanduhr – die Gesamtdauer der Ausführung der App-Aufgabe im Hintergrund. Desktopgerätefamilie: 10 Minuten. Familie mobiler Geräte: Kein Zeitlimit. Um Ressourcen zu sparen, können maximal 1 oder 2 Vorgänge gleichzeitig ausgeführt werden.
Die App wurde nicht beendet. Die Richtlinienüberprüfung gilt

Bewährte Methoden

Im Folgenden sind bewährte Methoden für Apps aufgeführt, die die DeviceUseTrigger-Hintergrundaufgaben verwenden.

Programmieren einer Hintergrundaufgabe

Die Verwendung der DeviceUseTrigger-Hintergrundaufgabe aus Ihrer App stellt sicher, dass alle Synchronisierungs- oder Überwachungsvorgänge, die von der Vordergrund-App gestartet wurden, weiterhin im Hintergrund ausgeführt werden, wenn Ihre Benutzer Apps wechseln und die 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. Rufen Sie RequestAccessAsync auf, um zu überprüfen, ob die App eine Hintergrundaufgabe anfordern kann. Dies muss erfolgen, bevor eine Hintergrundaufgabe registriert wird.

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

  3. 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.

  4. Schließen Sie alle geöffneten Geräte- oder Sensorobjekte, wenn Sie die DeviceUseTrigger-Hintergrundaufgabe auslösen, damit diese Geräte oder Sensoren frei geöffnet und von Ihrer Hintergrundaufgabe verwendet werden können.

  5. Registrieren Sie den Trigger.

  6. Berücksichtigen Sie sorgfältig die Auswirkungen des Akkuzugriffs auf ein Gerät oder einen Senor aus einer Hintergrundaufgabe. Wenn beispielsweise das Berichtsintervall eines Sensors zu häufig ausgeführt wird, kann dies dazu führen, dass die Aufgabe so oft ausgeführt wird, dass der Akku eines Smartphones schnell entwässert wird.

  7. Wenn die Hintergrundaufgabe abgeschlossen ist, heben Sie die Registrierung auf.

  8. 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.

  9. Heben Sie beim Beenden der App (nicht anhaltend) die Registrierung auf, und brechen Sie alle ausgeführten Aufgaben ab, wenn Die App sie nicht mehr benötigt. Auf ressourceneinschränkten Systemen, z. B. Telefonen mit geringem Arbeitsspeicher, ermöglicht dies anderen Apps die Verwendung einer DeviceUseTrigger-Hintergrundaufgabe.

    • 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.

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 DeviceUseTrigger-Hintergrundaufgabe zu registrieren. Wenn Sie die Registrierung Ihrer Hintergrundaufgabe mithilfe der Unregister-Methode für BackgroundTaskRegistration aufheben, wird die Hintergrundaufgabeninfrastruktur dazu führen, dass die Hintergrundaufgabe abgebrochen wird.

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 "Aufheben der Registrierung".

Neben der Registrierung muss Ihre App auch BackgroundTaskDeferral.Complete aufrufen. Dadurch wird das System darüber informiert, dass der asynchrone Vorgang, der einer Hintergrundaufgabe zugeordnet ist, abgeschlossen ist.