Freigeben über


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, Toastbenachrichtigungen gesendet und eine Kachel sowie ein Badge 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. The code for the background task is in the PrintBackgroundTask.cs file. The foreground app, the full-screen app that can be launched from Start, is in the DeviceAppForPrinters project. The InkLevel.xaml.cs file shows one way that notification details can be accessed from the foreground app. To work with print notifications, the sample uses the printer extension library in the PrinterExtensionLibrary project. 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. For more information, see Bidirectional Communications.

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. When the foreground app is launched, it can use the OnLaunched method in App.xaml.cs to check if it was launched by a tile or toast. 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. See Getting started for information about downloading the tools and creating a developer account.

  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. If you're writing your app with C# or JavaScript, add the PrinterExtensionLibrary and DeviceAppForPrintersLibrary projects to your UWP device app solution. 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 und ein EntryPoint Attribut festgelegt ist.BackgroundTask.PrintBackgroundTask Die Erweiterung enthält auch ein Task Element, um anzugeben, dass sie Aufgabentypen unterstützt systemEvent .

You can add the print background task extension on the Declarations tab of the Manifest Designer in Microsoft Visual Studio. Sie können das XML-Manifest des App-Paketmanifests auch manuell bearbeiten, indem Sie den XML-Editor (Text) verwenden. Right-click the Package.appxmanifest file in Solution Explorer for editing options.

This example shows the background task extension in the Extension element, as it appears in the app package manifest file, Package.appxmanifest.

<?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 Assistenten für die Gerätemetadatenerstellung verwenden, um Ihre App ihrem Gerät zuzuordnen, müssen Sie das Benachrichtigungshandlerfeld auf der Informationsseite " UWP-Geräte-App-Informationen angeben " abschließen. Dadurch wird sichergestellt, dass die Hintergrundaufgabe Ihrer App während einer Druckbenachrichtigung aufgerufen wird.

For step-by-step instructions on how to edit your device metadata, see the Testing section.

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.

Design guidelines

Es ist wichtig, die Microsoft Store-App-Richtlinien zu überprüfen, bevor Sie Ihre Kachel- und Signalerfahrung 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.

Best practices

  • Fügen Sie keine Aktionswörter für Benachrichtigungen ein. Verwenden Sie in der Benachrichtigung keinen Text, der Benutzern angibt, eine Benachrichtigung per Push, Drücken oder Auswählen von Benachrichtigungen zu senden, zu drücken oder auszuwählen. Benutzer wissen bereits, dass sie ein Popup drücken können, um weitere Informationen zu finden. Schreiben Sie z. B. einfach "Ihr Drucker ist bei Freihand niedrig" anstelle von "Ihr Drucker ist niedrig auf Freihand. Drücken Sie die Problembehandlung".

  • 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. Sie sollte keine Links zu nicht verwandten Erfahrungen enthalten, z. B. Freihandeingaben oder andere Supportinformationen.

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

  • Behalten Sie Benutzer im Kontext Ihrer App bei. 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 Drucker jedoch keine Freihandeingabe aufweist, kann die App eine Popupbenachrichtigung anzeigen.

Speichern von Benachrichtigungsdetails

Die Hintergrundaufgabe kann die Vordergrund-App nicht direkt starten, nur der Benutzer kann: von einer Kachel, popup oder 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 PrinterName Eigenschaften EventData des Objekts tragen den Druckernamen bzw. die Bidi-Meldung.

This example shows the background task's Run method, in the PrintBackgroundTask.cs file, where the print notification details are saved to app settings before the toast, tile, and badge methods are called.

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 Hintergrundaufgabe des Beispiels, wie sie auf einer Kachel angezeigt werden. Weitere Informationen zu Kacheln finden Sie unter Übersicht über Kachel- und Kachelbenachrichtigungen.

This example shows the background task's UpdateTile method, in the PrintBackgroundTask.cs file.

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. For more information about tiles, see Badge overview.

This example shows the background task's UpdateBadge method, in the PrintBackgroundTask.cs file.

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);
}

Auslösen eines Popups

Eine Popupbenachrichtigung ist eine vorübergehende Nachricht für den Benutzer, die relevante, zeitabhängige Informationen enthält, und bietet schnellen Zugriff auf verwandte Inhalte in einer App. Popupbenachrichtigungen sollten Benutzern als Einladung angezeigt werden, zu Ihrer App zurückzukehren, um etwas interessantes nachzuverfolgen. Weitere Informationen finden Sie unter Übersicht über Popupbenachrichtigungen.

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

Es wird nicht empfohlen, immer ein Popup anzuzeigen, insbesondere für nicht unaktionsfähige Ereignisse. Dies könnte für Benutzer lästig werden und dazu führen, dass sie alle Popups aus einer App deaktivieren. Für Ereignisse, die die sofortige Aufmerksamkeit des Benutzers nicht erfordern, empfehlen wir, nur die Kachel und das Signal zu aktualisieren und kein Popup anzuzeigen.

This example shows the ToastCapable attribute in the VisualElements element, as it appears in the app package manifest file, Package.appxmanifest.

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

This example is from the ShowToast method of the PrintBackgroundTask.cs file. Es zeigt, wie Sie ein Popup basierend auf zwei Zeichenfolgen, benannt title und body.

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: Behandeln der Aktivierung

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 LaunchActivatedEventArgs.arguments die Eigenschaft an die App übergeben. For more information about activation and the Microsoft Store app lifecycle, see Application lifecycle.

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.

This example is from the OnLaunched method of the App.xaml.cs file. 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. The code is from the DisplayBackgroundTaskTriggerDetails method of the InkLevel.xaml.cs file. The key index values, keyPrinterName, and keyAsyncUIXML, are the same string constants that are used in the background task, PrintBackgroundTask.cs.

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. From the Tools menu, select Enable Test Signing.

  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ü nach dem Laden des Beispiels zur Buildlösung>.

  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, lesen Sie "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. In the Open dialog box, locate the device metadata package associated with your UWP device app. (It has a devicemetadata-ms file extension.)

    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. If your app is registering for printer notifications, fill out the Notification handlers box. In Event ID, enter the name of the print event handler. In Event Asset, enter the name of the file where that code resides.

    6. When you're done, select Next until you get to the Finish page.

    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 ". Then select Save.

  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 keine Standardmäßige Druckbenachrichtigung angezeigt wird, wenn erwartet...

  • Possible cause: Test signing isn't turned on. Informationen zum Aktivieren finden Sie im Abschnitt "Debuggen" in diesem Artikel.

  • Possible cause: Toast notifications are disabled by domain policies. Verlassen Sie die Domäne, und versuchen Sie es erneut.

  • Possible cause: The printer hasn't implemented DriverEvents. Überprüfen Sie, ob Ihr v4-Treiber Bidi und DriverEvents unterstützt. Weitere Informationen finden Sie unter Treiberunterstützung für angepasste UI.

  • Possible cause: The machine has no recent job in the printer queue. Stellen Sie sicher, dass das Druckersymbol in der unteren rechten Ecke des Bildschirms angezeigt wird. Wenn nicht, senden Sie einen anderen Druckauftrag.

  • Possible cause: Your entry point for the background task (IBackgroundTask) is within the same project as your foreground app. Dieses Szenario ist nicht zulässig. Trennen Sie eine völlig neue Klasse für den Hintergrundaufgabenhandler.

  • Possible cause: The class that is the entry point for notifications in your app is incorrectly given in your manifest or device metadata, causing the app to crash within the background host and not showing any toast. Überprüfen Sie, ob die folgenden Probleme auftreten:

    • Make sure the entry point is given correctly in the Declarations tab of the Manifest Designer. 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.