后台任务中的 Toast 通知响应
Toast notification response in background task
我正在编写一个可以在后台任务中显示 toast 通知的应用程序(我使用 BackgroundTaskBuilder)。在通知中我使用了两个按钮,它们应该执行两个不同的功能,但我无法获得通知的响应。
我在网上看到我应该为此启动另一个后台任务,但是我无法在后台任务中启动另一个后台任务。
所以我的问题是:我怎样才能知道用户在通知中单击了哪个按钮?
感谢您的帮助。
在Windows10中,我们可以从前台或后台处理toast通知激活。在 Windows 10 中,它引入了在 <action>
元素中具有 activationType
属性的自适应和交互式 toast 通知。使用此属性,我们可以指定此操作将导致哪种激活。例如使用以下吐司:
<toast launch="app-defined-string">
<visual>
<binding template="ToastGeneric">
<text>Microsoft Company Store</text>
<text>New Halo game is back in stock!</text>
</binding>
</visual>
<actions>
<action activationType="foreground" content="See more details" arguments="details"/>
<action activationType="background" content="Remind me later" arguments="later"/>
</actions>
</toast>
当用户单击 "See more details" 按钮时,它会将应用程序带到前台。 Application.OnActivated method will be invoked with a new activation kind – ToastNotification。我们可以像下面这样处理这个激活:
protected override void OnActivated(IActivatedEventArgs e)
{
// Get the root frame
Frame rootFrame = Window.Current.Content as Frame;
// TODO: Initialize root frame just like in OnLaunched
// Handle toast activation
if (e is ToastNotificationActivatedEventArgs)
{
var toastActivationArgs = e as ToastNotificationActivatedEventArgs;
// Get the argument
string args = toastActivationArgs.Argument;
// TODO: Handle activation according to argument
}
// TODO: Handle other types of activation
// Ensure the current window is active
Window.Current.Activate();
}
当用户点击"Remind me later"按钮时,它会触发一个后台任务,而不是激活前台应用程序。所以不需要在一个后台任务中再启动一个后台任务。
要处理来自 toast 通知的后台激活,我们需要创建并注册一个后台任务。这
后台任务应在应用程序清单中声明为 "System event" 任务并将其触发器设置为 ToastNotificationActionTrigger. Then in the background task, use ToastNotificationActionTriggerDetail 以检索预定义参数以确定单击哪个按钮,如:
public sealed class NotificationActionBackgroundTask : IBackgroundTask
{
public void Run(IBackgroundTaskInstance taskInstance)
{
var details = taskInstance.TriggerDetails as ToastNotificationActionTriggerDetail;
if (details != null)
{
string arguments = details.Argument;
// Perform tasks
}
}
}
有关详细信息,请参阅 GitHub 上的 Adaptive and interactive toast notifications, especially Handling activation (foreground and background). And also the complete sample。
我正在编写一个可以在后台任务中显示 toast 通知的应用程序(我使用 BackgroundTaskBuilder)。在通知中我使用了两个按钮,它们应该执行两个不同的功能,但我无法获得通知的响应。
我在网上看到我应该为此启动另一个后台任务,但是我无法在后台任务中启动另一个后台任务。
所以我的问题是:我怎样才能知道用户在通知中单击了哪个按钮?
感谢您的帮助。
在Windows10中,我们可以从前台或后台处理toast通知激活。在 Windows 10 中,它引入了在 <action>
元素中具有 activationType
属性的自适应和交互式 toast 通知。使用此属性,我们可以指定此操作将导致哪种激活。例如使用以下吐司:
<toast launch="app-defined-string">
<visual>
<binding template="ToastGeneric">
<text>Microsoft Company Store</text>
<text>New Halo game is back in stock!</text>
</binding>
</visual>
<actions>
<action activationType="foreground" content="See more details" arguments="details"/>
<action activationType="background" content="Remind me later" arguments="later"/>
</actions>
</toast>
当用户单击 "See more details" 按钮时,它会将应用程序带到前台。 Application.OnActivated method will be invoked with a new activation kind – ToastNotification。我们可以像下面这样处理这个激活:
protected override void OnActivated(IActivatedEventArgs e)
{
// Get the root frame
Frame rootFrame = Window.Current.Content as Frame;
// TODO: Initialize root frame just like in OnLaunched
// Handle toast activation
if (e is ToastNotificationActivatedEventArgs)
{
var toastActivationArgs = e as ToastNotificationActivatedEventArgs;
// Get the argument
string args = toastActivationArgs.Argument;
// TODO: Handle activation according to argument
}
// TODO: Handle other types of activation
// Ensure the current window is active
Window.Current.Activate();
}
当用户点击"Remind me later"按钮时,它会触发一个后台任务,而不是激活前台应用程序。所以不需要在一个后台任务中再启动一个后台任务。
要处理来自 toast 通知的后台激活,我们需要创建并注册一个后台任务。这 后台任务应在应用程序清单中声明为 "System event" 任务并将其触发器设置为 ToastNotificationActionTrigger. Then in the background task, use ToastNotificationActionTriggerDetail 以检索预定义参数以确定单击哪个按钮,如:
public sealed class NotificationActionBackgroundTask : IBackgroundTask
{
public void Run(IBackgroundTaskInstance taskInstance)
{
var details = taskInstance.TriggerDetails as ToastNotificationActionTriggerDetail;
if (details != null)
{
string arguments = details.Argument;
// Perform tasks
}
}
}
有关详细信息,请参阅 GitHub 上的 Adaptive and interactive toast notifications, especially Handling activation (foreground and background). And also the complete sample。