后台任务记录时间并将其写入uwp应用程序的文件中

时间:2016-12-26 13:43:40

标签: windows-store-apps win-universal-app

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>

还有其他方法可以实现这一点。

1 个答案:

答案 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