Trabajar con notificaciones de impresión en una aplicación de dispositivo para UWP

Important

Los metadatos de dispositivo están obsoletos y se eliminarán en una futura versión de Windows. Para obtener información sobre el reemplazo de esta funcionalidad, vea Driver Package Container Metadata.

Las aplicaciones de dispositivos para UWP pueden responder a eventos de comunicación bidireccional (Bidi) que se envían desde un controlador de impresión v4. En este artículo se presentan las notificaciones de impresión y se muestra cómo la versión de C# de la configuración de impresión y el ejemplo de notificaciones de impresión usa una tarea en segundo plano para responder a la notificación de impresión. La tarea en segundo plano muestra cómo guardar los detalles de las notificaciones en el almacén de datos de la aplicación local, enviar brindis y actualizar un mosaico y un distintivo. Para obtener más información sobre las aplicaciones de dispositivos para UWP en general, consulta Meet UWP device apps (Conocer aplicaciones de dispositivos para UWP).

La versión de C# del ejemplo Configuración de impresión e notificaciones de impresión muestra la parte en segundo plano de la aplicación (la tarea en segundo plano) del proyecto BackgroundTask . El código de la tarea en segundo plano se encuentra en el archivo PrintBackgroundTask.cs . La aplicación en primer plano, la aplicación de pantalla completa que se puede iniciar desde Inicio, se encuentra en el proyecto DeviceAppForPrinters . El archivo InkLevel.xaml.cs muestra una manera de acceder a los detalles de notificación desde la aplicación en primer plano. Para trabajar con notificaciones de impresión, el ejemplo usa la biblioteca de extensiones de impresora en el proyecto PrinterExtensionLibrary . La biblioteca de extensiones de impresora proporciona una manera cómoda de acceder a las interfaces de extensión de impresora del controlador de impresión v4. Para obtener más información, consulte introducción a la biblioteca de extensiones de impresora.

Los ejemplos de código que se muestran en este artículo se basan en la versión de C# del ejemplo De configuración de impresión e notificaciones de impresión . Este ejemplo también está disponible en JavaScript y C++. Dado que C++ puede acceder directamente a COM, la versión de C++ del ejemplo no incluye proyectos de biblioteca de código. Descargue los ejemplos para ver las versiones más recientes del código.

Las notificaciones de impresión permiten que la aplicación de dispositivo para UWP informe al usuario de eventos importantes de impresora durante la impresión, como un atasco de papel, una puerta de impresora abierta, niveles de tinta bajos o errores de impresión fuera de papel. Cuando una impresora desencadena una notificación, el agente de eventos del sistema ejecuta la tarea en segundo plano de la aplicación. Desde allí, la tarea en segundo plano puede guardar los detalles de la notificación, enviar una notificación emergente, actualizar un mosaico, actualizar un distintivo o no hacer nada. Al guardar los detalles de la notificación, la aplicación puede proporcionar una experiencia que ayude a los usuarios a comprender y corregir sus problemas de impresora.

Los fabricantes de impresoras deben implementar Bidi y el archivo XML DriverEvent en su controlador de impresión v4 para usar las notificaciones de impresión con sus aplicaciones de dispositivo para UWP. Para obtener más información, vea Comunicaciones bidireccionales.

Cuando se produce un DriverEvent y la tarea en segundo plano de una aplicación de dispositivo para UWP se inicia, la aplicación tiene varias opciones sobre cómo puede continuar. Para obtener más información sobre el flujo que conduce al inicio de la tarea, consulte Compatibilidad con controladores para la interfaz de usuario personalizada.

La tarea en segundo plano tiene la opción de:

La notificación de mosaico o la notificación emergente puede permitir al usuario iniciar convenientemente la aplicación en primer plano. Cuando se inicia la aplicación en primer plano, puede usar el método OnLaunched en App.xaml.cs para comprobar si se ha iniciado mediante un mosaico o una notificación emergente. Si es así, la aplicación en primer plano puede acceder a cualquier detalle de notificación de impresión en el almacén de datos de la aplicación local.

Prerequisites

Antes de comenzar:

  1. Asegúrese de que la impresora está instalada mediante un controlador de impresión v4. Para más información, consulte Desarrollo de controladores de impresión v4.

  2. Configure tu PC de desarrollo. Consulte Introducción para obtener información sobre cómo descargar las herramientas y crear una cuenta de desarrollador.

  3. Asocie la aplicación a la tienda. Para obtener más información, consulta Crear una aplicación de dispositivo para UWP.

  4. Cree metadatos de dispositivo para la impresora que la asocie a la aplicación. Para obtener más información, consulte Creación de metadatos de dispositivo.

  5. Compile la interfaz de usuario para la página principal de la aplicación. Todas las aplicaciones de dispositivos para UWP se pueden iniciar desde Inicio, donde se muestran en pantalla completa. Utiliza la experiencia de inicio para resaltar tus productos o servicios de una manera que coincida con la imagen de marca y las características específicas de tus dispositivos. No hay restricciones especiales en el tipo de controles de interfaz de usuario que puede usar. Para empezar a trabajar con el diseño de la experiencia de pantalla completa, consulta los principios de diseño de Microsoft Store.

  6. Si escribes tu aplicación con C# o JavaScript, agrega los proyectos PrinterExtensionLibrary y DeviceAppForPrintersLibrary a tu solución de aplicación de dispositivo para UWP. Puede encontrar cada uno de estos proyectos en el ejemplo Configuración de impresión e notificaciones de impresión .

Dado que C++ puede acceder directamente a COM, las aplicaciones de C++ no requieren una biblioteca independiente para trabajar con el contexto del dispositivo de impresora basado en COM.

Paso 1: Registrar tarea en segundo plano

Para que Windows reconozca que la aplicación puede controlar las notificaciones de impresión, debe registrar una extensión de tareas en segundo plano para las notificaciones de impresión. Esta extensión se declara en Extension un elemento, con el atributo Category establecido en windows.backgroundTasks y el atributo EntryPoint establecido en BackgroundTask.PrintBackgroundTask. La extensión también incluye un Task elemento para indicar que admite systemEvent tipos de tareas.

Puede agregar la extensión de tarea de impresión en segundo plano en la pestaña Declarations del Diseñador de manifiesto de Microsoft Visual Studio. También puede editar manualmente el xml del manifiesto del paquete de la aplicación mediante el Editor XML (texto). Haga clic con el botón derecho en el archivo Package.appxmanifest en Explorador de soluciones para las opciones de edición.

En este ejemplo se muestra la extensión de tarea en segundo plano del Extension elemento, como aparece en el archivo de manifiesto del paquete de la aplicación, 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>

Paso 2: Configuración de metadatos de dispositivo

Cuando uses el Asistente para la Creación de Metadatos de Dispositivo para asociar tu aplicación con tu dispositivo, asegúrate de completar el cuadro de Controladores de notificaciones en la página de Especificar información de la aplicación para dispositivos UWP. Esto ayuda a garantizar que la tarea en segundo plano de su aplicación sea ejecutada durante una notificación de impresión.

Para obtener instrucciones paso a paso sobre cómo editar los metadatos del dispositivo, consulte la sección Pruebas .

Paso 3: Compilación de la interfaz de usuario

Antes de construir tu aplicación, deberías trabajar con tus diseñadores y tu equipo de marketing para diseñar la experiencia de usuario. La experiencia del usuario debe proyectar los aspectos de personalización de marca de su empresa y ayudarle a crear una conexión con los usuarios.

Directrices de diseño

Es importante revisar las directrices de la aplicación de Microsoft Store antes de diseñar la experiencia de icono y distintivo. Las directrices ayudan a garantizar que la aplicación proporciona una experiencia intuitiva que es coherente con otras aplicaciones para UWP.

Para la página principal de la aplicación, tenga en cuenta que Windows 8.1 puede mostrar varias aplicaciones en varios tamaños en un solo monitor. Consulta las siguientes instrucciones para obtener más información sobre cómo tu aplicación puede adaptarse correctamente entre tamaños de pantalla, tamaños de ventana y orientaciones.

procedimientos recomendados

  • No incluya palabras de acción en las notificaciones. En el mensaje de notificación, no use texto que indique a los usuarios que inserte, presione o seleccione la notificación. Los usuarios ya saben que pueden presionar una notificación del sistema para encontrar más información. Por ejemplo, simplemente escriba "Su impresora tiene poca tinta" en lugar de "Su impresora tiene poca tinta." Presione para solucionar problemas".

  • Mantenga las interacciones sencillas. Todo lo que se muestra en la experiencia de notificaciones debe estar relacionado con la notificación. Por ejemplo, una página de notificación sobre un atasco de papel solo debe contener vínculos e información sobre cómo resolver ese problema. No debe contener vínculos a experiencias no relacionadas, como la compra de tinta u otra información de soporte.

  • Usar multimedia. Use fotos, vídeos o ilustraciones reales del dispositivo para ayudar a los usuarios a resolver rápidamente un problema con su dispositivo.

  • Mantenga a los usuarios dentro del contexto de la aplicación. Al proporcionar información sobre un problema, no vincule a los materiales de soporte técnico en línea ni a otros materiales de soporte técnico. Mantenga al usuario en el contexto de la aplicación.

Paso 4: Crear tarea en segundo plano

Si la aplicación registra una tarea en segundo plano para las notificaciones de impresión, debe proporcionar un controlador para la activación de la tarea en segundo plano. En el ejemplo Configuración de impresión e notificaciones de impresión , la PrintBackgroundTask clase controla las notificaciones de impresión.

Si el estado de la impresora no requiere intervención inmediata del usuario, actualice un icono en lugar de mostrar una notificación del sistema. Por ejemplo, para una condición de tinta baja, una actualización de mosaico es suficiente. Si la impresora se queda sin tinta, la aplicación podría mostrar una notificación emergente.

Guardar los detalles de la notificación

La tarea en segundo plano no puede iniciar la aplicación en primer plano directamente; solo el usuario puede: desde un azulejo, una notificación (toast) o Inicio. Por lo tanto, para asegurarse de que la aplicación en primer plano pueda acceder a los detalles de la notificación de impresión, la tarea en segundo plano las guarda en el almacenamiento local. Para obtener más información sobre el uso del almacenamiento local, consulte Inicio rápido: datos de la aplicación local.

Cuando se desencadena una notificación de impresión, Windows ejecuta la tarea en segundo plano llamando a su Run método. Los datos de notificación se pasan a la tarea en segundo plano a través de un parámetro de método que se debe convertir al tipo Windows.Devices.Printers.Extensions.PrintNotificationEventDetails. Las PrinterName propiedades y EventData de ese objeto llevan el nombre de la impresora y el mensaje Bidi, respectivamente.

En este ejemplo se muestra el método Run de la tarea en segundo plano, en el archivo PrintBackgroundTask.cs, donde se guardan los detalles de la notificación de impresión en la configuración de la aplicación antes de llamar a los métodos de notificación emergente, icono y distintivo.

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

Actualización de un icono

Cuando los detalles de la notificación de impresión se envían al método UpdateTile, la tarea en segundo plano del ejemplo muestra cómo mostrarlos en un azulejo. Para obtener más información sobre los iconos, consulte Información general sobre las notificaciones de iconos y iconos.

En este ejemplo se muestra el método UpdateTile de la tarea en segundo plano, en el archivo 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);
}

Actualización de un distintivo

El UpdateBadge método muestra cómo usar la clase BadgeNotification para actualizar un distintivo. Para obtener más información sobre los iconos, consulte Información general sobre distintivos.

En este ejemplo se muestra el método UpdateBadge de la tarea en segundo plano, en el archivo 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);
}

Ofrecer un brindis

Una notificación emergente es un mensaje efímero para el usuario que contiene información relevante y oportuna, y proporciona acceso rápido al contenido relacionado en una aplicación. Las notificaciones emergentes deberían presentarse a los usuarios como una invitación para volver a tu aplicación y seguir algo que les interese. Para obtener más información, consulte Introducción a las notificaciones del sistema.

Para habilitar las notificaciones emergentes, la aplicación debe registrar que es capaz de mostrar notificaciones emergentes en el manifiesto del paquete de la aplicación. En el VisualElements elemento , establezca el ToastCapable atributo en true.

Important

No se recomienda mostrar siempre una notificación del sistema, especialmente para eventos que no son de acción. Esto podría resultar molesto para los usuarios y hacer que desactiven todos los mensajes emergentes de una aplicación. En el caso de los eventos que no requieren la atención inmediata del usuario, se recomienda actualizar solo el icono de aplicación y el distintivo, sin mostrar una notificación emergente.

En este ejemplo se muestra el ToastCapable atributo en el VisualElements elemento , como aparece en el archivo de manifiesto del paquete de la aplicación, 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>

Este ejemplo procede del ShowToast método del archivo PrintBackgroundTask.cs . Muestra cómo generar un mensaje basado en dos cadenas, denominadas title y 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);
}

Paso 5: Controlar la activación

Después de que una notificación de impresión desencadene la tarea en segundo plano, la aplicación se puede iniciar pulsando una notificación emergente o un mosaico. Si la aplicación se activa desde cualquiera de las dos, se pasa un parámetro a la aplicación a través de la propiedad LaunchActivatedEventArgs.arguments. Para obtener más información sobre la activación y el ciclo de vida de la aplicación de Microsoft Store, consulte Ciclo de vida de la aplicación.

Para determinar si la aplicación se activó en uno de estos casos, controla el OnLaunched evento y examina los argumentos de evento que se pasan al controlador de eventos. Si los argumentos de evento son NULL, el usuario activó la aplicación desde Inicio. Si los argumentos del evento no son NULL, la aplicación se inició desde una notificación del sistema o un icono.

Este ejemplo procede del OnLaunched método del archivo App.xaml.cs . Muestra cómo controlar la activación desde la notificación del sistema o los iconos.

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

Paso 6: Obtener acceso a los detalles de la notificación

Dado que la tarea en segundo plano no puede iniciar directamente la aplicación en primer plano, los detalles de la notificación de impresión deben guardarse en la configuración de la aplicación para que la aplicación en primer plano pueda acceder a ellos. Para obtener más información sobre el uso del almacenamiento local, consulte Inicio rápido: datos de la aplicación local.

En este ejemplo se muestra cómo se recuperan el nombre de la impresora y el mensaje Bidi de la configuración de la aplicación en el ejemplo Configuración de impresión e notificaciones de impresión . El código procede del DisplayBackgroundTaskTriggerDetails método del archivo InkLevel.xaml.cs . Los valores de índice de clave, keyPrinterName, y keyAsyncUIXML, son las mismas constantes de cadena que se usan en la tarea en segundo plano, 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

Para poder probar la aplicación de dispositivo para UWP, debe estar vinculada a la impresora mediante metadatos del dispositivo.

Necesita una copia del paquete de metadatos del dispositivo para la impresora para agregarle la información de la aplicación de dispositivo. Si no tiene metadatos de dispositivo, puede compilarlos mediante el Asistente para creación de metadatos de dispositivo, tal como se describe en el artículo Creación de metadatos de dispositivo para la aplicación de dispositivo para UWP.

Para usar el Asistente para creación de metadatos de dispositivo, debe instalar Microsoft Visual Studio Professional, Microsoft Visual Studio Ultimate o el SDK independiente para Windows 8.1, antes de completar los pasos de este artículo. La instalación de Microsoft Visual Studio Express para Windows instala una versión del SDK que no incluye el asistente.

Los pasos siguientes compilan la aplicación e instalan los metadatos del dispositivo.

  1. Habilite la firma de prueba.

    1. Inicie el Asistente para creación de metadatos de dispositivo desde %ProgramFiles(x86)%\Windows Kits\8.1\bin\x86 haciendo doble clic enDeviceMetadataWizard.exe

    2. En el menú Herramientas , seleccione Habilitar firma de prueba.

  2. Reiniciar el equipo

  3. Compile la solución abriendo el archivo de solución (.sln). Presione F7 o vaya a Build-Build> Solution en el menú superior después de cargar el ejemplo.

  4. Desconecte y desinstale la impresora. Este paso es necesario para que Windows lea los metadatos del dispositivo actualizado la próxima vez que se detecte el dispositivo.

  5. Edite y guarde los metadatos del dispositivo. Para conectar la aplicación al dispositivo, debe asociarla con su equipo.

    Si aún no se han creado los metadatos del dispositivo, consulta Crear metadatos de dispositivo para tu aplicación de dispositivo para UWP.

    1. Si el Asistente para creación de metadatos de dispositivo aún no está abierto, inícielo desde %ProgramFiles(x86)%\Windows Kits\8.1\bin\x86, haciendo doble clic enDeviceMetadataWizard.exe.

    2. Seleccione Editar metadatos del dispositivo. Esta opción le permite editar el paquete de metadatos del dispositivo existente.

    3. En el cuadro de diálogo Abrir , busque el paquete de metadatos del dispositivo asociado a la aplicación de dispositivo para UWP. (Tiene la extensión de archivo devicemetadata-ms.)

    4. En la página Especificar información de la aplicación de dispositivo para UWP , escriba la información de la aplicación de Microsoft Store en el cuadro Aplicación de dispositivo para UWP . Seleccione Importar archivo de manifiesto de aplicación para UWP para escribir automáticamente el nombre del paquete, el nombre del publicador y el identificador de la aplicación para UWP.

    5. Si la aplicación se registra para recibir notificaciones de impresora, rellene el cuadro Controladores de notificaciones. En Id. de evento, escriba el nombre del controlador de eventos de impresión. En Recurso de evento, escriba el nombre del archivo donde reside ese código.

    6. Cuando haya terminado, seleccione Siguiente hasta llegar a la página Finalizar .

    7. En la página Revisar el paquete de metadatos del dispositivo , asegúrese de que toda la configuración es correcta y active la casilla Copiar el paquete de metadatos del dispositivo en el almacén de metadatos del equipo local . A continuación, seleccione Guardar.

  6. Vuelva a conectar la impresora para que Windows lea los metadatos del dispositivo actualizados cuando el dispositivo esté conectado.

Troubleshooting

Problema: No aparece ninguna notificación emergente predeterminada

Si no aparece ninguna notificación de impresión predeterminada cuando se espera...

  • Causa posible: La firma de prueba no está activada. Consulte la sección de depuración de este artículo para obtener información sobre cómo activarla.

  • Causa posible: Las directivas de dominio deshabilitan las notificaciones del sistema. Deje el dominio e inténtelo de nuevo.

  • Causa posible: La impresora no ha implementado DriverEvents. Compruebe que el controlador v4 admite Bidi y DriverEvents. Para obtener más información, consulte Compatibilidad con controladores para la interfaz de usuario personalizada.

  • Causa posible: La máquina no tiene ningún trabajo reciente en la cola de impresoras. Asegúrese de que el icono de la impresora se muestra en la esquina inferior derecha de la pantalla. Si no es así, envíe otro trabajo de impresión.

  • Causa posible: El punto de entrada de la tarea en segundo plano (IBackgroundTask) está dentro del mismo proyecto que la aplicación en primer plano. No se permite este escenario. Separe una clase completamente nueva para el controlador de tareas en segundo plano.

  • Posible causa: La clase que actúa como punto de entrada para las notificaciones de tu aplicación se indica incorrectamente en el manifiesto o en los metadatos del dispositivo, lo que provoca que la aplicación se bloquee en el proceso host en segundo plano y no muestre ninguna notificación emergente. Compruebe si se dan los problemas siguientes:

    • Asegúrese de que el punto de entrada se haya especificado correctamente en la pestaña Declaraciones del Diseñador de manifiestos. Debe estar en forma de Namespace.ClassName para C# y C++. Para JavaScript, debe ser la ruta de acceso del directorio relativa al archivo .js.

    • Una aplicación de JavaScript debe llamar a close() una vez finalizada.

    • La clase de C# tiene que implementar Windows.ApplicationModel.Background.IBackgroundTask y tiene que tener un método void Run(Windows.ApplicationModel.Background.IBackgroundTaskInstance taskInstance) público.

    • La clase C++ tiene que implementar Windows::ApplicationModel::Background::IBackgroundTask y tiene que tener un virtual void Run(Windows::ApplicationModel::Background::IBackgroundTaskInstance^ taskInstance) método .