Toast通知在右上角有一个“关闭按钮”。我想获取用户点击“关闭按钮”并将时间附加到UWP应用程序中的文本文件中的当前时间。
我在注册后台任务时尝试过ToastNotificationHistoryChangedTrigger但在Visual Studio中的LifeCycleEvents中它没有显示任何事件,代码执行时没有任何错误。
builder.Name = "Sample";
builder.TaskEntryPoint = "BackgroundTaskGps.SampleBackgroundTask";
builder.SetTrigger(new T ToastNotificationHistoryChangedTrigger());
BackgroundTaskRegistration taskRegistration = builder.Register();
和清单
<Extensions>
<Extension Category="windows.backgroundTasks" EntryPoint="BackgroundTaskGps.SampleBackgroundTask">
<BackgroundTasks>
<Task Type="System Event" />
</BackgroundTasks>
</Extension>
</Extensions>
还有其他方法可以实现这一点。
答案 0 :(得分:1)
我在注册后台任务时尝试过ToastNotificationHistoryChangedTrigger但在Visual Studio中的LifeCycleEvents中它没有显示任何事件
根据this article:
调试器只能触发那些不包含数据的事件,例如指示设备状态发生变化的事件。您必须手动触发需要用户输入或其他数据的后台任务。
ToastNotificationHistoryChangedTrigger要求用户关闭通知,以便调试器无法触发通知。但实际上,当您关闭动作中心的通知时,它确实有效。 notification official sample有一个关于HistoryChangedTrigger的方案页面,其注册ToastNotificationHistoryChangedTrigger
,当用户关闭操作中心的通知时,它将触发后台任务以更新磁贴徽章。在此后台任务中添加写入文件逻辑将满足您的要求。代码如下:
public async void Run(IBackgroundTaskInstance taskInstance)
{
var details = taskInstance.TriggerDetails as ToastNotificationHistoryChangedTriggerDetail;
if (details == null)
return;
StorageFolder localfolder = ApplicationData.Current.LocalFolder;
StorageFile tempfile = await localfolder.CreateFileAsync("temp.txt", CreationCollisionOption.ReplaceExisting);
await FileIO.WriteTextAsync(tempfile, "test time");
...
taskInstance.Progress = (uint)details.ChangeType;
}
请注意,此触发器适用于从操作中心关闭的通知,不支持在通知推送时直接关闭。您可以在通知内容中自定义按钮以尝试与用户进行交互。如果您想通过Toast通知处理激活,请参考Handling activation from a toast。