如何处理来自 UWP 中单击 toast 按钮的后台激活事件
How to handle the background activation event coming from a toast button click in UWP
我正在尝试让一个时间触发的后台任务显示带有按钮的吐司。 "Are you ready to do xyx?" [是] [否]。单击“是”将转至网页。否将在下一个时间段之前关闭吐司。
在 Windows 10 个通用应用程序中,我看到了一些示例,其中从带有按钮的通用应用程序启动 toast,并且按钮在后台任务中处理。
我见过在从没有按钮的后台任务启动 toast 时显示消息的 toast。
我需要知道的是,如果从后台任务启动带有按钮的 Toast,您将如何处理按钮。
这可能吗?如果有怎么办?
下面是在后台任务中显示toast的代码:
namespace BGtask
{
public sealed class BGTimerTask : IBackgroundTask
{
public void Run(IBackgroundTaskInstance taskInstance)
{
var deferral = taskInstance.GetDeferral();
try
{
SendToast();
}
finally
{
// And finally release the deferral since we're done
deferral.Complete();
}
}
private void SendToast()
{
ToastContent content = new ToastContent()
{
Visual = new ToastVisual()
{
TitleText = new ToastText()
{
Text = "XYZ"
},
BodyTextLine1 = new ToastText()
{
Text = "Are you ready to do xyz?"
}
},
Actions = new ToastActionsCustom()
{
Inputs =
{
new ToastSelectionBox("selection")
{
Items =
{
new ToastSelectionBoxItem("1", "Yes"),
new ToastSelectionBoxItem("2", "Not Now"),
new ToastSelectionBoxItem("3", "Don't Show Again")
},
DefaultSelectionBoxItemId = "1"
}
},
Buttons =
{
new ToastButton("OK", new QueryString()
{
{ "action", "ok" },
}.ToString())
{
ActivationType = ToastActivationType.Background
},
}
}
};
ToastNotificationManager.CreateToastNotifier().Show(new ToastNotification(content.GetXml()));
}
}
}
我知道了,你已经设置好了ToastActivationType.Background
。这是正确的设置。您将需要在从同一应用程序注册的另一个后台任务中处理该按钮:
public sealed class NotificationActionBackgroundTask : IBackgroundTask
{
public void Run(IBackgroundTaskInstance taskInstance)
{
var details = taskInstance.TriggerDetails as ToastNotificationActionTriggerDetail;
if (details != null)
{
string arguments = details.Argument; // button argument
var userInput = details.UserInput;
var selection = userInput["selection"] // dropdown value
// process button
}
}
}
您需要使用 ToastNotificationActionTrigger
:
注册此任务
BackgroundAccessStatus status = await BackgroundExecutionManager.RequestAccessAsync();
BackgroundTaskBuilder builder = new BackgroundTaskBuilder()
{
Name = "MyToastTask",
TaskEntryPoint = "BgTask.NotificationActionBackgroundTask"
};
builder.SetTrigger(new ToastNotificationActionTrigger());
BackgroundTaskRegistration registration = builder.Register();
当然,不要忘记在应用程序清单中声明任务(您需要检查系统事件)并从您的应用程序中引用包含该任务的库。
更多详情请阅读this tutorial。 使用 Windows 10 自适应模板 处理来自 toast 通知的后台激活您应该特别感兴趣。
我正在尝试让一个时间触发的后台任务显示带有按钮的吐司。 "Are you ready to do xyx?" [是] [否]。单击“是”将转至网页。否将在下一个时间段之前关闭吐司。
在 Windows 10 个通用应用程序中,我看到了一些示例,其中从带有按钮的通用应用程序启动 toast,并且按钮在后台任务中处理。
我见过在从没有按钮的后台任务启动 toast 时显示消息的 toast。
我需要知道的是,如果从后台任务启动带有按钮的 Toast,您将如何处理按钮。
这可能吗?如果有怎么办?
下面是在后台任务中显示toast的代码:
namespace BGtask
{
public sealed class BGTimerTask : IBackgroundTask
{
public void Run(IBackgroundTaskInstance taskInstance)
{
var deferral = taskInstance.GetDeferral();
try
{
SendToast();
}
finally
{
// And finally release the deferral since we're done
deferral.Complete();
}
}
private void SendToast()
{
ToastContent content = new ToastContent()
{
Visual = new ToastVisual()
{
TitleText = new ToastText()
{
Text = "XYZ"
},
BodyTextLine1 = new ToastText()
{
Text = "Are you ready to do xyz?"
}
},
Actions = new ToastActionsCustom()
{
Inputs =
{
new ToastSelectionBox("selection")
{
Items =
{
new ToastSelectionBoxItem("1", "Yes"),
new ToastSelectionBoxItem("2", "Not Now"),
new ToastSelectionBoxItem("3", "Don't Show Again")
},
DefaultSelectionBoxItemId = "1"
}
},
Buttons =
{
new ToastButton("OK", new QueryString()
{
{ "action", "ok" },
}.ToString())
{
ActivationType = ToastActivationType.Background
},
}
}
};
ToastNotificationManager.CreateToastNotifier().Show(new ToastNotification(content.GetXml()));
}
}
}
我知道了,你已经设置好了ToastActivationType.Background
。这是正确的设置。您将需要在从同一应用程序注册的另一个后台任务中处理该按钮:
public sealed class NotificationActionBackgroundTask : IBackgroundTask
{
public void Run(IBackgroundTaskInstance taskInstance)
{
var details = taskInstance.TriggerDetails as ToastNotificationActionTriggerDetail;
if (details != null)
{
string arguments = details.Argument; // button argument
var userInput = details.UserInput;
var selection = userInput["selection"] // dropdown value
// process button
}
}
}
您需要使用 ToastNotificationActionTrigger
:
BackgroundAccessStatus status = await BackgroundExecutionManager.RequestAccessAsync();
BackgroundTaskBuilder builder = new BackgroundTaskBuilder()
{
Name = "MyToastTask",
TaskEntryPoint = "BgTask.NotificationActionBackgroundTask"
};
builder.SetTrigger(new ToastNotificationActionTrigger());
BackgroundTaskRegistration registration = builder.Register();
当然,不要忘记在应用程序清单中声明任务(您需要检查系统事件)并从您的应用程序中引用包含该任务的库。
更多详情请阅读this tutorial。 使用 Windows 10 自适应模板 处理来自 toast 通知的后台激活您应该特别感兴趣。