计划 toast 通知

通过计划的 toast 通知,可以计划通知使其在稍后某个时间显示,无论应用在该时间是否正在运行。 这对于为用户显示提醒或其他后续任务等场景很有用,在这些场景中,用户提前知晓通知的时间和内容。

请注意,计划的 toast 通知的传送窗口持续 5 分钟。 如果计算机在计划传送期间关闭,且保持关闭的时间超过 5 分钟,则通知会因不再与用户相关而被“删除”。 如果需要保证无论计算机关闭多久都能传送通知,建议使用时间触发器后台任务,如此处代码示例所示。

重要

桌面应用程序(打包和解压缩)在发送通知和处理激活方面略有不同。 请遵照以下说明操作,但请将桌面应用文档的 ToastNotificationManager 替换为 DesktopNotificationManagerCompat 类。

重要 API:ScheduledToastNotification Class

先决条件

若要充分了解本主题,以下内容将有所帮助...

  • Toast 通知术语和概念的工作知识。 有关详细信息,请参阅 Toast 和操作中心概述
  • 熟悉 Windows 10 toast 通知内容。 有关详细信息,请参阅 Toast 内容文档
  • Windows 10 UWP 应用项目

步骤 1:安装 NuGet 包

安装 Microsoft.Toolkit.Uwp.Notifications NuGet 包。 代码示例将使用此包。 在文章的结尾,我们将提供不使用任何 NuGet 包的“纯”代码段。 使用此包,无需使用 XML 即可创建 toast 通知。

步骤 2:添加命名空间声明

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

步骤 3:计划通知

我们将使用一个基于简单文本的通知来提醒学生他们今天要完成的作业。 构造并计划通知!

// 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 提供主键

如要以编程方式取消、删除或替换计划通知,需使用 Tag 属性(还可选择使用 Group 属性)来为通知提供主键。 然后,你可以在以后使用此主键来取消、删除或替换该通知。

若要查看有关替换/删除已传递的 Toast 通知的更多详细信息,请参阅 快速入门:在操作中心(XAML)中管理 Toast 通知。

标记和组合用作复合主键。 组是更通用的标识符,可在其中分配“wallPosts”、“messages”、“friendRequests”等组。然后,Tag 应从组中唯一标识通知本身。 然后,通过使用泛型组,可以使用 RemoveGroup API 从该组中删除所有通知。

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

取消预定通知

若要取消计划通知,首先必须检索所有计划通知的列表。

然后,找到与前面指定的标记(或组)匹配的计划 toast,并调用 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);
}

重要

Win32 应用(运行时缺少包标识)必须使用 ToastNotificationManagerCompat 类,如上所示。 如果使用 ToastNotificationManager 本身,则会收到一个找不到元素的异常。 所有类型的应用都可以使用 Compat 类,并且它将正常工作。

激活处理

若要详细了解如何处理激活,请参阅发送本地 toast 文档。 计划的 toast 通知的激活处理方式与本地 toast 通知相同。

添加操作、输入等

若要详细了解操作和输入等高级主题,请参阅发送本地 toast 文档。 操作和输入在本地 toast 中的工作方式与在计划的 toast 中相同。

资源