计划 Toast 通知

通过安排的 Toast 通知,你可以设定通知在指定时间显示,无论你的应用当时是否正在运行。 这对于向用户显示提醒或其他后续任务等方案非常有用,其中通知的时间和内容是提前已知的。

请注意,定时的 toast 通知的发送窗口为 5 分钟。 如果计算机在计划传递期间关闭,并且保持关闭时间超过 5 分钟,通知将“删除”,因为不再与用户相关。 如果需要保证传递通知,而不考虑计算机关闭的时间,我们建议将后台任务与时间触发器一起使用,如 此代码示例所示。

重要

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

重要 APIScheduledToastNotification 类

先决条件

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

  • 对于弹出式通知术语和概念的基本了解。 有关详细信息,请参阅 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 属性(以及(可选)组属性为通知提供主键。 然后,可以在将来使用此主键取消、删除或替换通知。

若要查看有关替换/删除已传递的 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 中的工作方式相同。

资源