Compartir a través de


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

En Windows 8.1, 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 tema se presentan las notificaciones de impresión y se muestra cómo la versión de C# del ejemplo Configuración de impresión y 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 notificación en el almacén de datos de la aplicación local, enviar notificaciones del sistema y actualizar un mosaico y un distintivo. Para obtener más información sobre las aplicaciones de dispositivos para UWP en general, consulte Conocer las aplicaciones de dispositivos para UWP.

La versión de C# del ejemplo Configuración de impresión y 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 a 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 del 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 Información general sobre la biblioteca de extensiones de impresora.

Los ejemplos de código que se muestran en este tema se basan en la versión de C# del ejemplo Configuración de impresión y notificaciones de impresión. Este ejemplo también está disponible en JavaScript y C++. Tenga en cuenta que, 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 impresora sin 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 del sistema, actualizar un icono, 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, consulte 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 puede elegir:

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

Requisitos previos

Antes de comenzar:

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

  2. Configure su equipo 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 con la tienda. Consulte Creación de una aplicación de dispositivo para UWP para obtener información.

  4. Cree metadatos de dispositivo para la impresora que la asocien con la aplicación. Consulte Creación de metadatos de dispositivo para obtener más información.

  5. Cree 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 mostrarán a pantalla completa. Use la experiencia de Inicio para resaltar el producto o los servicios de forma que coincida con la personalización de marca y las características específicas de los dispositivos. No hay restricciones especiales en cuanto al tipo de controles de interfaz de usuario que puede usar. Para empezar a trabajar con el diseño de la experiencia a pantalla completa, consulte los Principios de diseño de Microsoft Store.

  6. Si está escribiendo su aplicación con C# o JavaScript, agregue los proyectos PrinterExtensionLibrary y DeviceAppForPrintersLibrary a la solución de aplicación de dispositivo para UWP. Puede encontrar cada uno de estos proyectos en el ejemplo Configuración de impresión y 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 la 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 un elemento Extension, con un atributo Category establecido en windows.backgroundTasks y un atributo EntryPoint establecido en BackgroundTask.PrintBackgroundTask. La extensión también incluye un elemento Task para indicar que admite tipos de tareas systemEvent.

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

En este ejemplo se muestra la extensión de la tarea en segundo plano en el elemento Extension, tal 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: Configurar los metadatos de dispositivo

Al utilizar el Asistente para crear metadatos de dispositivo para asociar su aplicación al dispositivo, asegúrese de completar el cuadro Controladores de notificaciones en la página Especificar información de la aplicación de dispositivo para UWP. Esto ayuda a garantizar que se llama a la tarea en segundo plano de la aplicación 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: Crear la interfaz de usuario

Antes de crear la aplicación, debe trabajar con los diseñadores y el equipo de marketing para diseñar la experiencia del 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.

Guías de diseño

Es importante revisar las directrices de la aplicación de Microsoft Store antes de diseñar la experiencia de mosaico y distintivo. Las directrices ayudan a garantizar que la aplicación proporcione una experiencia intuitiva que sea 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. Consulte las siguientes directrices para obtener más información sobre cómo su aplicación puede cambiar de tamaño de pantalla, tamaño de ventana y orientación.

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 inserten, pulsen o hagan clic en la notificación. Los usuarios ya saben que pueden pulsar una notificación del sistema para obtener más información. Por ejemplo, simplemente escriba "El nivel de tinta de la impresora es bajo" en lugar de "El nivel de tinta de la impresora es bajo. Pulse para solucionar el problema".

  • 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 información sobre dónde comprar tinta u otra información de soporte.

  • Use elementos 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. Cuando proporcione información sobre un problema, no ponga enlaces a materiales de soporte en línea o de otro tipo. Mantenga al usuario en el contexto de la aplicación.

Paso 4: Crear la 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 y notificaciones de impresión, la clase PrintBackgroundTask controla las notificaciones de impresión.

Si el estado de la impresora no requiere la intervención inmediata del usuario, actualice un mosaico en lugar de mostrar una notificación del sistema. Por ejemplo, para una indicación de nivel bajo de tinta, basta con actualizar un mosaico. Pero si no queda nada de tinta en la impresora, la aplicación puede mostrar una notificación del sistema.

Guardado de los 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 mosaico, notificación del sistema 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 método Run. Los datos de notificación se transfieren 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 propiedades PrinterName 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 los detalles de la notificación de impresión se guardan en la configuración de la aplicación antes de llamar a los métodos de notificación del sistema, mosaico 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 mosaico. Para obtener más información sobre los mosaicos, consulte Información general sobre los mosaicos y notificaciones de mosaicos.

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 método UpdateBadge muestra cómo usar la clase BadgeNotification para actualizar un distintivo. Para obtener más información sobre los distintivos, 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);
}

Generación de una notificación del sistema

Una notificación del sistema es un mensaje transitorio para el usuario que contiene información relevante, sensible al tiempo y proporciona acceso rápido al contenido relacionado de una aplicación. Las notificaciones del sistema deben mostrarse a los usuarios como una invitación para volver a la aplicación para realizar un seguimiento de algo de interés. Para obtener más información, consulte Información general sobre las notificaciones del sistema.

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

Importante

No se recomienda mostrar siempre una notificación del sistema, especialmente para eventos no accionables. Esto puede resultar molesto para los usuarios y hacer que desactiven todas las notificaciones del sistema de una aplicación. En el caso de los eventos que no requieren la atención inmediata del usuario, se recomienda actualizar solo el mosaico y el distintivo, y no mostrar una notificación del sistema.

En este ejemplo se muestra el atributo ToastCapable en el elemento VisualElements, tal 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 método ShowToast del archivo PrintBackgroundTask.cs. Muestra cómo generar una notificación del sistema basada en dos cadenas, llamadas 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 del sistema o un mosaico. Si la aplicación se activa desde cualquiera de ellos, se transferirá 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, controle el evento OnLaunched y examine los argumentos del evento que se transfieren al controlador de eventos. Si los argumentos del evento son NULL, significa que el usuario activó la aplicación desde Inicio. Si los argumentos del evento no son NULL, significa que la aplicación se inició desde una notificación del sistema o un mosaico.

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

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: Acceder 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 recupera 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 y notificaciones de impresión. El código procede del método DisplayBackgroundTaskTriggerDetails del archivo InkLevel.xaml.cs. Tenga en cuenta que 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;
}

Prueba

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 del dispositivo. Si no tiene metadatos de dispositivo, puede crearlos mediante el Asistente para creación de metadatos de dispositivo, tal como se describe en el tema 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 tema. La instalación de Microsoft Visual Studio Express para Windows instala una versión del SDK que no incluye el asistente.

Los pasos siguientes permiten crear la aplicación e instalar los metadatos del dispositivo.

  1. Habilite la firma de pruebas.

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

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

  2. Reinicie el equipo.

  3. Cree la solución abriendo el archivo de solución (.sln). Pulse F7 o vaya a Crear->Crear solución 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 vincular la aplicación de dispositivo al dispositivo, debe asociar la aplicación de dispositivo al dispositivo.

    Si aún no ha creado los metadatos del dispositivo, consulte Creación de metadatos de dispositivo para la aplicación de dispositivo para UWP.

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

    2. Haga clic en Editar metadatos del dispositivo. Esto le permitirá 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 una 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. Haga clic en Importar archivo de manifiesto de aplicación para UWP para introducir automáticamente el Nombre del paquete, el Nombre del publicador y el Identificador de la aplicación para UWP.

    5. Si la aplicación está registrada para recibir notificaciones de impresora, rellene el cuadro Controladores de notificaciones. En Identificador 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, haga clic en 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 sea correcta y active la casilla Copiar el paquete de metadatos del dispositivo en el almacén de metadatos del equipo local. A continuación, haga clic en Save(Guardar).

  6. Vuelva a conectar la impresora para que Windows lea los metadatos del dispositivo actualizados cuando se conecte el dispositivo.

Solución de problemas

Problema: No aparece ninguna notificación del sistema 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 Depuración de este tema para obtener información sobre cómo activarla.

  • Causa posible: las directivas de dominio han deshabilitado las notificaciones del sistema. Abandone 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. Esto no está permitido. Separe una clase completamente nueva para el controlador de tareas en segundo plano.

  • Causa posible: la clase que es el punto de entrada para las notificaciones de la aplicación se proporciona incorrectamente en los metadatos del manifiesto o dispositivo, lo que hace que la aplicación se bloquee dentro del backgroundhost y no muestre ninguna notificación del sistema. Compruebe lo siguiente:

    • Asegúrese de que el punto de entrada se proporciona correctamente en la pestaña Declaraciones del Diseñador de manifiestos. Debe tener el formato Namespace.ClassName para C# y C++. Para JavaScript, debe ser la ruta de acceso al directorio relativo del 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 Run(Windows.ApplicationModel.Background.IBackgroundTaskInstance taskInstance) nulo público.

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

Información general sobre distintivos (aplicaciones para UWP)

Información general sobre mosaicos y notificaciones de mosaicos (aplicaciones para UWP)

Directrices y lista de comprobación para mosaicos y distintivos (aplicaciones para UWP)

Información general sobre las notificaciones del sistema (aplicaciones para UWP)

Directrices y lista de comprobación para las notificaciones del sistema (aplicaciones para UWP)

Compatibilidad con controladores para la interfaz de usuario personalizada

Desarrollo de controladores de impresión v4

Interfaces de extensión de impresora (controlador de impresión v4)

Comunicaciones bidireccionales

Introducción a las aplicaciones para UWP

Creación de una aplicación de dispositivo para UWP (guía paso a paso)

Creación de metadatos de dispositivo para una aplicación de dispositivo para UWP (guía paso a paso)