Arbeiten mit Druckbenachrichtigungen in einer UWP-Geräte-App

Important

Geräte-Metadaten sind veraltet und werden in einer zukünftigen Version von Windows entfernt. Informationen zum Ersatz dieser Funktionalität finden Sie unter Treiberpaketcontainermetadaten.

UWP-Geräte-Apps können auf bidirektionale Kommunikationsereignisse (Bidi) reagieren, die von einem v4-Drucktreiber gesendet werden. In diesem Artikel werden Druckbenachrichtigungen vorgestellt und gezeigt, wie die C#-Version der Druckeinstellungen und druckbenachrichtigungen eine Hintergrundaufgabe verwendet, um auf Druckbenachrichtigungen zu reagieren. Die Hintergrundaufgabe veranschaulicht, wie Benachrichtigungsdetails im lokalen App-Datenspeicher gespeichert, Popups gesendet und eine Kachel und ein Signal aktualisiert werden. Weitere Informationen zu UWP-Geräte-Apps im Allgemeinen finden Sie unter "Treffen von UWP-Geräte-Apps".

In der C#-Version der Druckeinstellungen und des Druckbenachrichtigungsbeispiels wird der Hintergrundteil der App (die Hintergrundaufgabe) im BackgroundTask-Projekt veranschaulicht. Der Code für die Hintergrundaufgabe befindet sich in der datei PrintBackgroundTask.cs . Die Vordergrund-App, die Vollbild-App, die über "Start" gestartet werden kann, befindet sich im DeviceAppForPrinters-Projekt . Die InkLevel.xaml.cs Datei zeigt eine Möglichkeit, wie auf Benachrichtigungsdetails über die Vordergrund-App zugegriffen werden kann. Zum Arbeiten mit Druckbenachrichtigungen verwendet das Beispiel die Druckererweiterungsbibliothek im PrinterExtensionLibrary-Projekt . Die Druckererweiterungsbibliothek bietet eine bequeme Möglichkeit, auf die Druckererweiterungsschnittstellen des v4-Drucktreibers zuzugreifen. Weitere Informationen finden Sie in der Übersicht über die Druckererweiterungsbibliothek.

Die in diesem Artikel gezeigten Codebeispiele basieren auf der C#-Version der Druckeinstellungen und des Druckbenachrichtigungsbeispiels . Dieses Beispiel ist auch in JavaScript und C++ verfügbar. Da C++ direkt auf COM zugreifen kann, enthält die C++-Version des Beispiels keine Codebibliotheksprojekte. Laden Sie die Beispiele herunter, um die neuesten Versionen des Codes anzuzeigen.

Mithilfe von Druckbenachrichtigungen informieren Ihre UWP-Geräte-App den Benutzer über wichtige Druckerereignisse beim Drucken, wie z. B. Papierstau, geöffnete Druckertür, niedrige Druckfarbenwerte oder Druckerfehler. Wenn ein Drucker eine Benachrichtigung auslöst, führt der Systemereignisbroker die Hintergrundaufgabe Ihrer App aus. Von dort aus kann die Hintergrundaufgabe die Benachrichtigungsdetails speichern, ein Popup senden, eine Kachel aktualisieren, ein Signal aktualisieren oder nichts tun. Durch das Speichern von Benachrichtigungsdetails kann Ihre App eine Benutzererfahrung bereitstellen, die Benutzern hilft, ihre Druckerprobleme zu verstehen und zu beheben.

Druckerhersteller müssen Bidi und die DriverEvent-XML-Datei in ihrem v4-Drucktreiber implementieren, um Druckbenachrichtigungen mit ihren UWP-Geräte-Apps zu verwenden. Weitere Informationen finden Sie unter Bidirektionale Kommunikation.

Wenn ein DriverEvent auftritt und die Hintergrundaufgabe einer UWP-Geräte-App gestartet wird, verfügt die App über mehrere Optionen, um fortzufahren. Weitere Informationen zum Fluss, der zum Starten der Aufgabe führt, finden Sie unter Treiberunterstützung für angepasste UI.

Die Hintergrundaufgabe kann folgende Aktionen ausführen:

Mit der Kachelbenachrichtigung oder Popupbenachrichtigung kann der Benutzer die Vordergrund-App bequem starten. Wenn die Vordergrund-App gestartet wird, kann sie die OnLaunched Methode in App.xaml.cs verwenden, um zu überprüfen, ob sie von einer Kachel oder einem Popup gestartet wurde. Wenn dies der Fall war, kann die Vordergrund-App auf alle Druckbenachrichtigungsdetails im lokalen App-Datenspeicher zugreifen.

Prerequisites

Bevor Sie beginnen:

  1. Stellen Sie sicher, dass Ihr Drucker mit einem v4-Drucktreiber installiert ist. Weitere Informationen finden Sie unter Entwickeln von v4-Drucktreibern.

  2. Richten Sie Ihren Entwicklungs-PC ein. Informationen zum Herunterladen der Tools und zum Erstellen eines Entwicklerkontos finden Sie unter "Erste Schritte ".

  3. Ordnen Sie Ihre App dem Store zu. Weitere Informationen finden Sie unter Erstellen einer UWP-Geräte-App.

  4. Erstellen Sie Gerätemetadaten für Ihren Drucker, der sie Ihrer App zuordnet. Weitere Informationen finden Sie unter Erstellen von Gerätemetadaten.

  5. Erstellen Sie die Benutzeroberfläche für die Hauptseite Ihrer App. Alle UWP-Geräte-Apps können von "Start" gestartet werden, wo sie im Vollbildmodus angezeigt werden. Verwenden Sie die Startoberfläche, um Ihr Produkt oder Ihre Dienste auf eine Weise hervorzuheben, die den spezifischen Branding- und Features Ihrer Geräte entspricht. Es gibt keine besonderen Einschränkungen für den Typ der UI-Steuerelemente, die sie verwenden können. Informationen zu den ersten Schritten mit dem Design der Vollbildoberfläche finden Sie in den Microsoft Store-Designprinzipien.

  6. Wenn Sie Ihre App mit C# oder JavaScript schreiben, fügen Sie der UWP-Geräte-App-Lösung die Projekte PrinterExtensionLibrary und DeviceAppForPrintersLibrary hinzu. Sie finden jedes dieser Projekte im Beispiel " Druckeinstellungen" und "Druckbenachrichtigungen" .

Da C++ direkt auf COM zugreifen kann, benötigen C++-Apps keine separate Bibliothek, um mit dem COM-basierten Druckergerätekontext zu arbeiten.

Schritt 1: Registrieren einer Hintergrundaufgabe

Damit Windows erkennen kann, dass die App Druckbenachrichtigungen verarbeiten kann, muss sie eine Erweiterung für Hintergrundaufgaben für Druckbenachrichtigungen registrieren. Diese Erweiterung wird in einem Extension-Element deklariert, wobei ein Category-Attribut auf windows.backgroundTasks gesetzt und ein EntryPoint-Attribut auf BackgroundTask.PrintBackgroundTask gesetzt ist. Die Erweiterung enthält auch ein Task Element, um anzugeben, dass sie Aufgabentypen unterstützt systemEvent .

Sie können die Druckhintergrundaufgabenerweiterung auf der Registerkarte "Deklarationen" des Manifest-Designers in Microsoft Visual Studio hinzufügen. Sie können das XML-Manifest des App-Paketmanifests auch manuell bearbeiten, indem Sie den XML-Editor (Text) verwenden. Klicken Sie mit der rechten Maustaste auf die Datei "Package.appxmanifest" in Projektmappen-Explorer, um Bearbeitungsoptionen anzuzeigen.

In diesem Beispiel wird die Hintergrundaufgabenerweiterung im Extension Element dargestellt, wie sie in der App-Paketmanifestdatei "Package.appxmanifest" angezeigt wird.

<?xml version="1.0" encoding="utf-8"?>
<Package xmlns="http://schemas.microsoft.com/appx/2010/manifest">
  <Identity Name="Microsoft.SDKSamples.DeviceAppForPrinters.CS" Publisher="CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US" Version="1.0.0.0" />
  <Properties>
    <DisplayName>Device App For Printers C# sample</DisplayName>
    <PublisherDisplayName>Microsoft Corporation</PublisherDisplayName>
    <Logo>Assets\storeLogo-sdk.png</Logo>
  </Properties>
  <Prerequisites>
    <OSMinVersion>6.3.0</OSMinVersion>
    <OSMaxVersionTested>6.3.0</OSMaxVersionTested>
  </Prerequisites>
  <Resources>
    <Resource Language="x-generate" />
  </Resources>
  <Applications>
    <Application Id="DeviceAppForPrinters" Executable="$targetnametoken$.exe" EntryPoint="DeviceAppForPrinters.App">
      <VisualElements DisplayName="Device App For Printers C# sample" Logo="Assets\squareTile-sdk.png"
                      SmallLogo="Assets\smallTile-sdk.png" Description="DeviceAppForPrinters C# sample"
                      ForegroundText="light" BackgroundColor="#00b2f0" ToastCapable="true">
        <DefaultTile ShowName="allLogos" ShortName="App4PrinterCS" WideLogo="Assets\tile-sdk.png" />
        <SplashScreen Image="Assets\splash-sdk.png" BackgroundColor="#00b2f0" />
      </VisualElements>
      <Extensions>
        <Extension Category="windows.backgroundTasks" EntryPoint="BackgroundTask.PrintBackgroundTask">
          <BackgroundTasks>
            <Task Type="systemEvent" />
          </BackgroundTasks>
        </Extension>
        <Extension Category="windows.printTaskSettings" Executable="$targetnametoken$.exe" EntryPoint="DeviceAppForPrinters.App" />
      </Extensions>
    </Application>
  </Applications>
</Package>

Schritt 2: Konfigurieren von Gerätemetadaten

Wenn Sie den Gerätemetadaten-Erstellungsassistenten verwenden, um Ihre App mit Ihrem Gerät zu verknüpfen, stellen Sie sicher, dass Sie das Feld Benachrichtigungshalndler auf der Seite Informationen zur UWP-Geräte-App angeben ausfüllen. Dadurch wird sichergestellt, dass die Hintergrundaufgabe Ihrer App während einer Druckbenachrichtigung aufgerufen wird.

Schrittweise Anleitungen zum Bearbeiten von Gerätemetadaten finden Sie im Abschnitt " Tests ".

Schritt 3: Erstellen der Benutzeroberfläche

Bevor Sie Ihre App erstellen, sollten Sie mit Ihren Designern und Ihrem Marketingteam zusammenarbeiten, um die Benutzererfahrung zu entwerfen. Die Benutzeroberfläche sollte die Brandingaspekte Ihres Unternehmens projizieren und Ihnen dabei helfen, eine Verbindung mit Ihren Benutzern herzustellen.

Entwurfsrichtlinien

Es ist wichtig, dass Sie die Richtlinien für die Microsoft Store-App überprüfen, bevor Sie das Design Ihrer Kachel- und Abzeichenerfahrung entwerfen. Die Richtlinien tragen dazu bei, dass Ihre App eine intuitive Benutzeroberfläche bietet, die mit anderen UWP-Apps konsistent ist.

Beachten Sie für die Hauptseite Ihrer App, dass Windows 8.1 mehrere Apps in verschiedenen Größen auf einem einzigen Monitor anzeigen kann. Weitere Informationen dazu, wie Ihre App zwischen Bildschirmgrößen, Fenstergrößen und Ausrichtungen ordnungsgemäß umbrechen kann, finden Sie in den folgenden Richtlinien.

Bewährte Methoden

  • Fügen Sie keine Aktionswörter für Benachrichtigungen ein. Verwenden Sie in der Benachrichtigung keinen Text, der Benutzern angibt, die Benachrichtigung zu drücken, anzutippen oder auszuwählen. Benutzer wissen bereits, dass sie ein Popup drücken können, um weitere Informationen zu erhalten. Schreiben Sie z. B. einfach "Ihr Drucker hat wenig Tinte" anstelle von "Ihr Drucker hat wenig Tinte." Drücken Sie, um das Problem zu beheben.

  • Halten Sie Interaktionen einfach. Alles, was auf der Benachrichtigungsoberfläche angezeigt wird, sollte mit der Benachrichtigung zusammenhängen. Beispielsweise sollte eine Benachrichtigungsseite zu einem Papierstau nur Links und Informationen zum Beheben dieses Problems enthalten. Es sollte keine Links zu nicht verwandten Erfahrungen enthalten, wie zum Beispiel zum Kauf von Tinte oder zu anderen Supportinformationen.

  • Verwenden Sie Multimedia. Verwenden Sie tatsächliche Fotos, Videos oder Illustrationen des Geräts, um Benutzern zu helfen, ein Problem mit ihrem Gerät schnell zu beheben.

  • Halten Sie Benutzer im Kontext Ihrer App. Wenn Sie Informationen zu einem Problem bereitstellen, erstellen Sie keinen Link zu Online- oder anderen Supportmaterialien. Behalten Sie den Benutzer im Kontext der App bei.

Schritt 4: Erstellen einer Hintergrundaufgabe

Wenn Ihre App eine Hintergrundaufgabe für Druckbenachrichtigungen registriert, muss sie einen Handler für die Aktivierung der Hintergrundaufgabe bereitstellen. Im Beispiel " Druckeinstellungen und Druckbenachrichtigungen " behandelt die PrintBackgroundTask Klasse die Druckbenachrichtigungen.

Wenn der Druckerstatus keinen sofortigen Benutzereingriff erfordert, aktualisieren Sie eine Kachel, anstatt ein Popup anzuzeigen. Bei einer niedrigen Freihandbedingung reicht beispielsweise eine Kachelaktualisierung aus. Wenn der Tintenstand des Druckers jedoch aufgebraucht ist, zeigt die App möglicherweise eine Popup-Benachrichtigung an.

Speichern von Benachrichtigungsdetails

Die Hintergrundaufgabe kann die Vordergrund-App nicht direkt starten, nur der Benutzer kann: von einer Kachel, einem Popup oder von Start. Um sicherzustellen, dass die Vordergrund-App auf die Druckbenachrichtigungsdetails zugreifen kann, speichert die Hintergrundaufgabe sie im lokalen Speicher. Weitere Informationen zur Verwendung des lokalen Speichers finden Sie in der Schnellstartanleitung: lokale App-Daten.

Wenn eine Druckbenachrichtigung ausgelöst wird, führt Windows die Hintergrundaufgabe durch Aufrufen der zugehörigen Run Methode aus. Die Benachrichtigungsdaten werden über einen Methodenparameter an die Hintergrundaufgabe übergeben, der in den Typ "Windows.Devices.Printers.Extensions.PrintNotificationEventDetails" umgewandelt werden muss. Die Eigenschaften PrinterName und EventData dieses Objekts tragen den Druckernamen und die Bidi-Meldung.

Dieses Beispiel zeigt die Methode Run der Hintergrundaufgabe in der Datei PrintBackgroundTask.cs , in der die Details der Druckbenachrichtigung in den App-Einstellungen gespeichert werden, bevor die Methoden Popup, Kachel und Badge aufgerufen werden.

public void Run(Windows.ApplicationModel.Background.IBackgroundTaskInstance taskInstance)
{
    // Save notification details to local storage
    PrintNotificationEventDetails details = (PrintNotificationEventDetails)taskInstance.TriggerDetails;
    settings.Values[keyPrinterName] = details.PrinterName;
    settings.Values[keyAsyncUIXML] = details.EventData;

    // Demonstrate possible actions
    ShowToast(details.PrinterName, details.EventData);
    UpdateTile(details.PrinterName, details.EventData);
    UpdateBadge();
}

Aktualisieren einer Kachel

Wenn die Druckbenachrichtigungsdetails an die UpdateTile Methode gesendet werden, veranschaulicht die Beispiel-Hintergrundaufgabe, wie sie auf einer Tile angezeigt werden können. Weitere Informationen zu Kacheln finden Sie unter Übersicht über Kachel- und Kachelbenachrichtigungen.

Dieses Beispiel zeigt die Methode der Hintergrundaufgabe UpdateTile in der datei PrintBackgroundTask.cs .

void UpdateTile(string printerName, string bidiMessage)
{
    TileUpdater tileUpdater = TileUpdateManager.CreateTileUpdaterForApplication();
    tileUpdater.Clear();

    XmlDocument tileXml = TileUpdateManager.GetTemplateContent(TileTemplateType.TileWide310x150Text09);
    XmlNodeList tileTextAttributes = tileXml.GetElementsByTagName("text");
    tileTextAttributes[0].InnerText = printerName;
    tileTextAttributes[1].InnerText = bidiMessage;

    TileNotification tileNotification = new TileNotification(tileXml);
    tileNotification.Tag = "tag01";
    tileUpdater.Update(tileNotification);
}

Aktualisieren eines Badges

Die UpdateBadge Methode zeigt, wie Sie die BadgeNotification-Klasse verwenden, um ein Signal zu aktualisieren. Weitere Informationen zu Kacheln finden Sie in der Badge-Übersicht.

Dieses Beispiel zeigt die Methode der Hintergrundaufgabe UpdateBadge in der datei PrintBackgroundTask.cs .

void UpdateBadge()
{
    XmlDocument badgeXml = BadgeUpdateManager.GetTemplateContent(BadgeTemplateType.BadgeGlyph);
    XmlElement badgeElement = (XmlElement)badgeXml.SelectSingleNode("/badge");
    badgeElement.SetAttribute("value", "error");

    var badgeNotification = new BadgeNotification(badgeXml);
    BadgeUpdateManager.CreateBadgeUpdaterForApplication().Update(badgeNotification);
}

Einen Toast ausbringen

Eine Toast-Benachrichtigung ist eine vorübergehende Nachricht für den Benutzer, die relevante, zeitkritische Informationen enthält und ermöglicht schnellen Zugriff auf verwandte Inhalte in einer App. Toast-Benachrichtigungen sollten Benutzern als Einladung angezeigt werden, zu Ihrer App zurückzukehren, um etwas Interessantes nachzuverfolgen. Weitere Informationen finden Sie unter Übersicht über Toast-Benachrichtigungen.

Um Popupbenachrichtigungen zu aktivieren, muss die App registrieren, dass sie im App-Paketmanifest popupfähig ist. Legen Sie im VisualElements Element das ToastCapable Attribut auf "true" fest.

Important

Wir raten davon ab, stets ein Popup anzuzeigen, insbesondere bei Ereignissen, die keine Aktion erfordern. Dies kann für Benutzer lästig werden und dazu führen, dass sie alle Popups aus einer App deaktivieren. Für Ereignisse, die keine sofortige Aufmerksamkeit des Benutzers erfordern, empfehlen wir, nur die Kachel und das Badge zu aktualisieren und kein Popup anzuzeigen.

Dieses Beispiel zeigt das ToastCapable Attribut im VisualElements Element, wie es in der App-Paketmanifestdatei " Package.appxmanifest" angezeigt wird.

<VisualElements DisplayName="Device App For Printers C# sample" Logo="Assets\squareTile-sdk.png"
                SmallLogo="Assets\smallTile-sdk.png" Description="DeviceAppForPrinters C# sample"
                ForegroundText="light" BackgroundColor="#00b2f0" ToastCapable="true">
  <DefaultTile ShowName="allLogos" ShortName="App4PrinterCS" WideLogo="Assets\tile-sdk.png" />
  <SplashScreen Image="Assets\splash-sdk.png" BackgroundColor="#00b2f0" />
</VisualElements>

Dieses Beispiel stammt aus der ShowToast Methode der PrintBackgroundTask.cs-Datei . Es zeigt, wie man ein Popup basierend auf zwei Zeichenfolgen mit den Namentitle und body erstellt.

void ShowToast(string title, string body)
{
    //
    // Get Toast template
    //
    XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastText02);

    //
    // Pass to app as eventArgs.detail.arguments
    //
    ((XmlElement)toastXml.SelectSingleNode("/toast")).SetAttribute("launch", title);

    //
    // The ToastText02 template has 2 text nodes (a header and a body)
    // Assign title to the first one, and body to the second one
    //
    XmlNodeList textList = toastXml.GetElementsByTagName("text");
    textList[0].AppendChild(toastXml.CreateTextNode(title));
    textList[1].AppendChild(toastXml.CreateTextNode(body));

    //
    // Show the Toast
    //
    ToastNotification toast = new ToastNotification(toastXml);
    ToastNotificationManager.CreateToastNotifier().Show(toast);
}

Schritt 5: Aktivierung vornehmen

Nachdem eine Druckbenachrichtigung die Hintergrundaufgabe ausgelöst hat, kann die App gestartet werden, indem Sie auf eine Popupbenachrichtigung oder eine Kachel tippt. Wenn Ihre App über eine der beiden aktiviert wird, wird ein Parameter über die Eigenschaft LaunchActivatedEventArgs.arguments an die App übergeben. Weitere Informationen zur Aktivierung und zum Microsoft Store App-Lebenszyklus finden Sie unter "Anwendungslebenszyklus".

Um festzustellen, ob Ihre App in einem dieser Fälle aktiviert wurde, behandeln Sie das OnLaunched Ereignis, und überprüfen Sie die Ereignisargumente, die an den Ereignishandler übergeben werden. Wenn die Ereignisargumente null sind, wurde die App vom Benutzer von Start aktiviert. Wenn die Ereignisargumente nicht null sind, wurde die App über ein Popup oder eine Kachel gestartet.

Dieses Beispiel stammt aus der OnLaunched Methode der App.xaml.cs-Datei . Es zeigt, wie die Aktivierung von Popups oder Kacheln behandelt wird.

protected override async void OnLaunched(LaunchActivatedEventArgs args)
{
    Frame rootFrame = Window.Current.Content as Frame;

    // Do not repeat app initialization when the Window already has content,
    // just ensure that the window is active

    if (rootFrame == null)
    {
        // Create a Frame to act as the navigation context and navigate to the first page
        rootFrame = new Frame();
        // Associate the frame with a SuspensionManager key
        SuspensionManager.RegisterFrame(rootFrame, "AppFrame");

        if (args.PreviousExecutionState == ApplicationExecutionState.Terminated)
        {
            // Restore the saved session state only when appropriate
            try
            {
                await SuspensionManager.RestoreAsync();
            }
            catch (SuspensionManagerException)
            {
                //Something went wrong restoring state.
                //Assume there is no state and continue
            }
        }

        // Place the frame in the current Window
        Window.Current.Content = rootFrame;
    }
    if (rootFrame.Content == null || !String.IsNullOrEmpty(args.Arguments))
    {
        // When the navigation stack isn't restored or there are launch arguments
        // indicating an alternate launch (e.g.: via toast or secondary tile),
        // navigate to the appropriate page, configuring the new page by passing required
        // information as a navigation parameter
        if (!rootFrame.Navigate(typeof(MainPage), args.Arguments))
        {
            throw new Exception("Failed to create initial page");
        }
    }
    // Ensure the current window is active
    Window.Current.Activate();
}

Schritt 6: Zugriffsbenachrichtigungsdetails

Da die Hintergrundaufgabe die Vordergrund-App nicht direkt starten kann, müssen die Druckbenachrichtigungsdetails in den Einstellungen der App gespeichert werden, damit die Vordergrund-App darauf zugreifen kann. Weitere Informationen zur Verwendung des lokalen Speichers finden Sie in der Schnellstartanleitung: lokale App-Daten.

In diesem Beispiel wird gezeigt, wie der Druckername und die Bidi-Nachricht aus den App-Einstellungen im Beispiel " Druckeinstellungen" und "Druckbenachrichtigungen" abgerufen werden. Der Code stammt aus der DisplayBackgroundTaskTriggerDetails Methode der InkLevel.xaml.cs Datei. Die Schlüsselindexwerte, keyPrinterName und keyAsyncUIXML, sind dieselben Zeichenfolgenkonstanten, die in der Hintergrundaufgabe PrintBackgroundTask.cs verwendet werden.

void DisplayBackgroundTaskTriggerDetails()
{
    String outputText = "\r\n";

    try
    {
        string printerName = settings.Values[keyPrinterName].ToString();
        outputText += ("Printer name from background task triggerDetails: " + printerName);
    }
    catch (Exception)
    {
        outputText += ("No printer name retrieved from background task triggerDetails ");
    }

    outputText += "\r\n";
    try
    {
        string asyncUIXML = settings.Values[keyAsyncUIXML].ToString();
        outputText += ("AsyncUI xml from background task triggerDetails: " + asyncUIXML);
    }
    catch (Exception)
    {
        outputText += ("No asyncUI xml retrieved from background task triggerDetails ");
    }

    ToastOutput.Text += outputText;
}

Testing

Bevor Sie Ihre UWP-Geräte-App testen können, muss sie mithilfe von Gerätemetadaten mit Ihrem Drucker verknüpft werden.

Sie benötigen eine Kopie des Gerätemetadatenpakets für Ihren Drucker, um die Geräte-App-Informationen hinzuzufügen. Wenn Sie nicht über Gerätemetadaten verfügen, können Sie sie mit dem Assistenten für die Erstellung von Gerätemetadaten erstellen, wie im Artikel "Erstellen von Gerätemetadaten für Ihre UWP-Geräte-App" beschrieben.

Um den Assistenten zum Erstellen von Gerätemetadaten zu verwenden, müssen Sie Microsoft Visual Studio Professional, Microsoft Visual Studio Ultimate oder das eigenständige SDK für Windows 8.1 installieren, bevor Sie die Schritte in diesem Artikel ausführen. Beim Installieren von Microsoft Visual Studio Express für Windows wird eine Version des SDK installiert, die den Assistenten nicht enthält.

Die folgenden Schritte erstellen Ihre App und installieren die Gerätemetadaten.

  1. Aktivieren Sie die Testsignatur.

    1. Starten Sie den Assistenten für die Erstellung von Gerätemetadaten aus %ProgramFiles(x86)%\Windows Kits\8.1\bin\x86, indem Sie auf DeviceMetadataWizard.exe doppelklicken.

    2. Wählen Sie im Menü "Extras " die Option "Testsignatur aktivieren" aus.

  2. Neustarten des Computers

  3. Erstellen Sie die Lösung, indem Sie die Lösungsdatei (.sln) öffnen. Drücken Sie F7 oder wechseln Sie im oberen Menü zur Option Build->Lösung erstellen, nachdem das Beispiel geladen wurde.

  4. Trennen Sie den Drucker und deinstallieren Sie ihn. Dieser Schritt ist erforderlich, damit Windows die aktualisierten Gerätemetadaten beim nächsten Erkennen des Geräts liest.

  5. Bearbeiten und Speichern von Gerätemetadaten Um die Geräte-App mit Ihrem Gerät zu verknüpfen, müssen Sie die Geräte-App Ihrem Gerät zuordnen.

    Wenn Ihre Gerätemetadaten noch nicht erstellt wurden, siehe Erstellen von Gerätemetadaten für Ihre UWP-Geräte-App.

    1. Wenn der Assistent für die Erstellung von Gerätemetadaten noch nicht geöffnet ist, starten Sie ihn von %ProgramFiles(x86)%\Windows Kits\8.1\bin\x86, indem Sie auf DeviceMetadataWizard.exedoppelklicken.

    2. Wählen Sie "Gerätemetadaten bearbeiten" aus. Mit dieser Option können Sie Ihr vorhandenes Gerätemetadatenpaket bearbeiten.

    3. Suchen Sie im Dialogfeld " Öffnen " das Gerätemetadatenpaket, das Ihrer UWP-Geräte-App zugeordnet ist. (Sie hat die Dateierweiterung devicemetadata-ms.)

    4. Geben Sie auf der Seite " Informationen zur UWP-Geräte-App angeben " die Informationen zur Microsoft Store-App in das Feld "UWP-Geräte-App " ein. Wählen Sie "UWP-App-Manifestdatei importieren " aus, um automatisch den Paketnamen, den Herausgebernamen und die UWP-App-ID einzugeben.

    5. Wenn Ihre App für Druckerbenachrichtigungen registriert ist, füllen Sie das Benachrichtigungshandlerfeld aus. Geben Sie in der Ereignis-ID den Namen des Druckereignishandlers ein. Geben Sie in "Event Asset" den Namen der Datei ein, in der sich dieser Code befindet.

    6. Wenn Sie fertig sind, wählen Sie "Weiter" aus, bis Sie zur Seite " Fertig stellen " gelangen.

    7. Vergewissern Sie sich auf der Seite " Überprüfen des Gerätemetadatenpakets ", dass alle Einstellungen korrekt sind, und aktivieren Sie das Kontrollkästchen "Gerätemetadatenpaket in den Metadatenspeicher auf dem lokalen Computer kopieren ". Klicken Sie dann auf Speichern.

  6. Verbinden Sie den Drucker erneut, damit Windows die aktualisierten Gerätemetadaten liest, wenn das Gerät verbunden ist.

Troubleshooting

Problem: Es wird keine standardmäßige Popupbenachrichtigung angezeigt.

Wenn die Standarddruckbenachrichtigung nicht erscheint, wie erwartet...

  • Mögliche Ursache: Die Testsignatur ist nicht aktiviert. Informationen zum Aktivieren finden Sie im Abschnitt "Debuggen" in diesem Artikel.

  • Mögliche Ursache: Toastbenachrichtigungen sind durch Domänenrichtlinien deaktiviert. Verlassen Sie die Domäne, und versuchen Sie es erneut.

  • Mögliche Ursache: Der Drucker hat DriverEvents nicht implementiert. Überprüfen Sie, ob Ihr v4-Treiber Bidi und DriverEvents unterstützt. Weitere Informationen finden Sie unter Treiberunterstützung für angepasste UI.

  • Mögliche Ursache: Der Computer hat keinen aktuellen Auftrag in der Druckerwarteschlange. Stellen Sie sicher, dass das Druckersymbol in der unteren rechten Ecke des Bildschirms angezeigt wird. Wenn nicht, senden Sie einen anderen Druckauftrag.

  • Mögliche Ursache: Ihr Einstiegspunkt für die Hintergrundaufgabe (IBackgroundTask) befindet sich innerhalb desselben Projekts wie die Vordergrund-App. Dieses Szenario ist nicht zulässig. Extrahieren Sie eine völlig neue Klasse für Ihren Hintergrundaufgaben-Handler.

  • Mögliche Ursache: Die Klasse, die den Einstiegspunkt für Benachrichtigungen in Ihrer App darstellt, ist in Ihrem Manifest oder Ihren Gerätemetadaten falsch angegeben, was dazu führt, dass die App im Hintergrundhost abstürzt und kein Popup angezeigt wird. Überprüfen Sie, ob die folgenden Probleme auftreten:

    • Stellen Sie sicher, dass der Einstiegspunkt auf der Registerkarte " Deklarationen " des Manifest-Designers richtig angegeben ist. Er sollte sich in Form von Namespace.ClassName für C# und C++ befinden. Bei JavaScript sollte es sich um den relativen Verzeichnispfad zur .js-Datei sein.

    • Eine JavaScript-App sollte close() aufrufen, nachdem sie abgeschlossen ist.

    • Die C#-Klasse muss Windows.ApplicationModel.Background.IBackgroundTask implementieren und über eine public void-Methode Run(Windows.ApplicationModel.Background.IBackgroundTaskInstance taskInstance) verfügen.

    • Die C++-Klasse muss Windows::ApplicationModel::Background::IBackgroundTask implementieren und über eine virtual void Run(Windows::ApplicationModel::Background::IBackgroundTaskInstance^ taskInstance) Methode verfügen.