Share via


Programar una notificación del sistema

Las notificaciones del sistema programadas permiten programar una notificación para que aparezca más adelante, independientemente de si la aplicación se está ejecutando en ese momento. Esto es útil para escenarios como mostrar recordatorios u otras tareas de seguimiento para el usuario, donde la hora y el contenido de la notificación se conocen con antelación.

Tenga en cuenta que las notificaciones del sistema programadas tienen un período de entrega de 5 minutos. Si el equipo está desactivado durante el tiempo de entrega programado y permanece apagado durante más de 5 minutos, la notificación se "quitará" como ya no es relevante para el usuario. Si necesita garantizar la entrega de notificaciones independientemente de cuánto tiempo estaba desactivado el equipo, se recomienda usar una tarea en segundo plano con un desencadenador de hora, como se muestra en este ejemplo de código.

Importante

Las aplicaciones de escritorio (tanto empaquetadas como desempaquetadas) tienen pasos ligeramente diferentes para enviar notificaciones y controlar la activación. Siga las instrucciones siguientes, pero reemplace por ToastNotificationManager la clase de la DesktopNotificationManagerCompat documentación de aplicaciones de escritorio .

API importantes: Clase ScheduledToastNotification

Requisitos previos

Para comprender completamente este tema, lo siguiente será útil...

Paso 1: Instalación del paquete NuGet

Instale el paquete NuGet Microsoft.Toolkit.Uwp.Notifications. Nuestro ejemplo de código usará este paquete. Al final del artículo, proporcionaremos los fragmentos de código "sin formato" que no usan ningún paquete NuGet. Este paquete permite crear notificaciones del sistema sin usar XML.

Paso 2: Agregar declaraciones de espacio de nombres

using Microsoft.Toolkit.Uwp.Notifications; // Notifications library

Paso 3: Programar la notificación

Usaremos una notificación simple basada en texto que recuerda a un alumno sobre los deberes que han vencido hoy. Construya la notificación y programela.

// Construct the content and schedule the toast!
new ToastContentBuilder()
    .AddArgument("action", "viewItemsDueToday")
    .AddText("ASTR 170B1")
    .AddText("You have 3 items due today!");
    .Schedule(DateTime.Now.AddSeconds(5));

Proporcionar una clave principal para la notificación del sistema

Si desea cancelar, quitar o reemplazar mediante programación la notificación programada, debe usar la propiedad Tag (y, opcionalmente, la propiedad Group) para proporcionar una clave principal para la notificación. A continuación, puede usar esta clave principal en el futuro para cancelar, quitar o reemplazar la notificación.

Para ver más detalles sobre cómo reemplazar o quitar las notificaciones del sistema ya entregadas, consulta Inicio rápido: Administración de notificaciones del sistema en el centro de actividades (XAML).

La etiqueta y el grupo actúan como una clave principal compuesta. El grupo es el identificador más genérico, donde puede asignar grupos como "wallPosts", "messages", "friendRequests", etc. Y, a continuación, Tag debe identificar de forma única la propia notificación desde dentro del grupo. Mediante el uso de un grupo genérico, puede quitar todas las notificaciones de ese grupo mediante la API RemoveGroup.

// Construct the content and schedule the toast!
new ToastContentBuilder()
    .AddArgument("action", "viewItemsDueToday")
    .AddText("ASTR 170B1")
    .AddText("You have 3 items due today!");
    .Schedule(DateTime.Now.AddSeconds(5), toast =>
    {
        toast.Tag = "18365";
        toast.Group = "ASTR 170B1";
    });

Cancelación de notificaciones programadas

Para cancelar una notificación programada, primero debe recuperar la lista de todas las notificaciones programadas.

A continuación, busque la notificación del sistema programada que coincida con la etiqueta (y, opcionalmente, agrupar) que especificó anteriormente y llame a RemoveFromSchedule().

// Create the toast notifier
ToastNotifierCompat notifier = ToastNotificationManagerCompat.CreateToastNotifier();

// Get the list of scheduled toasts that haven't appeared yet
IReadOnlyList<ScheduledToastNotification> scheduledToasts = notifier.GetScheduledToastNotifications();

// Find our scheduled toast we want to cancel
var toRemove = scheduledToasts.FirstOrDefault(i => i.Tag == "18365" && i.Group == "ASTR 170B1");
if (toRemove != null)
{
    // And remove it from the schedule
    notifier.RemoveFromSchedule(toRemove);
}

Importante

Una aplicación Win32 sin empaquetar (carece de identidad de paquete en tiempo de ejecución) debe usar la clase ToastNotificationManagerCompat como se ha visto anteriormente. Si usa el propio ToastNotificationManager , recibirá una excepción de elemento no encontrado. Todos los tipos de aplicaciones pueden usar la clase Compat y funcionarán correctamente.

Control de activación

Consulte la documentación de envío de una notificación del sistema local para obtener más información sobre el control de la activación. La activación de una notificación del sistema programada se controla igual que la activación de una notificación del sistema local.

Agregar acciones, entradas y mucho más

Consulte la documentación de envío de una notificación del sistema local para obtener más información sobre temas avanzados, como acciones y entradas. Las acciones y las entradas funcionan igual en las notificaciones del sistema locales que en las notificaciones del sistema programadas.

Recursos