通过安排的 Toast 通知,你可以设定通知在指定时间显示,无论你的应用当时是否正在运行。 这对于向用户显示提醒或其他后续任务等方案非常有用,其中通知的时间和内容是提前已知的。
请注意,定时的 toast 通知的发送窗口为 5 分钟。 如果计算机在计划传递期间关闭,并且保持关闭时间超过 5 分钟,通知将“删除”,因为不再与用户相关。 如果需要保证传递通知,而不考虑计算机关闭的时间,我们建议将后台任务与时间触发器一起使用,如 此代码示例所示。
重要
桌面应用程序(打包和解压缩)在发送通知和处理激活方面略有不同。 请按照下面的说明操作,但请将 ToastNotificationManager
替换为 DesktopNotificationManagerCompat
文档中的 类。
重要 API:ScheduledToastNotification 类
先决条件
若要充分了解本主题,以下内容将有所帮助...
- 对于弹出式通知术语和概念的基本了解。 有关详细信息,请参阅 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 中的工作方式相同。