app计划通知

计划app通知可以让你在未来的时间安排通知显示,而不考虑你的app在那个时候是否正在运行。 这对于向用户显示提醒或其他后续任务等方案非常有用,其中通知的时间和内容是提前已知的。

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

Note

术语“toast notification”正在替换为“app notification”。 这些术语都指的是 Windows 的相同功能,但随着时间的推移,我们将逐步取消使用文档中的“toast 通知”。

Important

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

重要 APIScheduledToastNotification 类

Prerequisites

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

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

步骤 1:安装 NuGet 包

安装 Microsoft.Toolkit.Uwp.Notifications NuGet 包。 我们的代码示例将使用此包。 本文末尾将提供不使用任何 NuGet 包的“普通”代码片段。 此包允许在不使用 XML 的情况下创建 app 通知。

步骤 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));

为通知提供主密钥

如果要以编程方式取消、删除或替换计划的通知,则需要使用 Tag 属性(以及(可选)组属性为通知提供主键。 然后,可以在将来使用此主键取消、删除或替换通知。

若要查看有关替换/删除已传递 app 通知的更多详细信息,请参阅 快速入门:在作中心(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";
    });

取消计划通知

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

然后,查找您先前指定的与标签(和可选的组)匹配的计划通知,并调用 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);
}

Important

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

Activation handling

请参阅 发送本地 app 通知 文档,了解有关处理激活的详细信息。 计划的 app 通知的激活处理方式与本地 app 通知的激活相同。

添加操作、输入和更多内容

请参阅 发送本地 app 通知 文档,了解有关高级主题(如操作和输入)。 动作和输入在本地app通知中的工作方式与在计划app通知中的工作方式相同。

Resources