使用ToastNotificationActionTrigger从后台任务中检索toast参数

本文关键字:检索 toast 参数 后台任务 ToastNotificationActionTrigger 使用 | 更新日期: 2023-09-27 17:58:07

我正试图在后台任务中从toast通知中检索参数,但微软网站上推荐的方法不起作用。

我正在我的主要UWP应用程序的OnInitialize()方法中注册任务,如下所示:

foreach (var task in BackgroundTaskRegistration.AllTasks)
{
      if (task.Value.Name.Equals(taskName))
      {
           task.Value.Unregister(true);
      }
}
BackgroundAccessStatus status = await BackgroundExecutionManager.RequestAccessAsync();
BackgroundTaskBuilder builder = new BackgroundTaskBuilder()
{
      Name = taskName,
      TaskEntryPoint = "AppNamespace.GetQuestionsBackground"
};

我发送到设备的toast通知如下:

var toast = "<?xml version='"1.0'" encoding='"utf - 8'"?>" +
            $"<toast launch='"questionId:{question.ToString()}:{journal.Id.ToString()}:{staffId.ToString()}'">" +
            "<visual><binding template='"ToastImageAndText02'">" +
            "<text id='"1'">New Question</text>" +
            "<text id='"2'">There is a question waiting to be answered</text>" +
            "<image id='"1'" src='"ms-appx:///Assets/DailyQuestion32.png'" />" +
            "</binding></visual>" +
            "<actions>" +
            $"<action activationType='"foreground'" content='"Answer now'" arguments='"now:{question.ToString()}:{journal.Id.ToString()}:{staffId.ToString()}'"/>" +
            $"<action activationType='"background'" content='"Answer later'" arguments='"later:{question.ToString()}:{journal.Id.ToString()}:{staffId.ToString()}'"/>" +
            "</actions>" +
            "</toast>";

后台任务(在一个单独的windows运行时组件项目中)如下:

public sealed class GetQuestionsBackground : IBackgroundTask
{
    public async void Run(IBackgroundTaskInstance taskInstance)
    {
        _deferal = taskInstance.GetDeferral();
        this.container = this.diBootStaraaper.BootStrap(applicationData);
        var details = taskInstance.TriggerDetails as ToastNotificationActionTriggerDetail;
        if (details.Argument != null)
        {
            var argList = details.Argument.Split(':');
            IDataProvider dataProvider = DependencyHelper.Resolve<IDataProvider>();
            await dataProvider.SaveQuestion(argList[1], argList[2], argList[3]);
            dataProvider.SaveSettings();
        }
        _deferal.Complete();
    }
}

包清单还有如下后台任务寄存器:

<Extension Category="windows.backgroundTasks" EntryPoint="AppNamespace.GetQuestionsBackground">
      <BackgroundTasks>
        <Task Type="systemEvent" />
      </BackgroundTasks>
</Extension>

details变量只是空的,if语句条件是否为true?此外,visual studio无法查看taskInstance.triggerDetails的当前状态,当我断点进入代码并逐步执行时…

任何帮助都将不胜感激,谢谢!

更新:当我单击toast通知按钮并在Visual Studio中查看变量时,我已经进入了后台任务,并且我可以在本机实现上的_PiEventDetails中的m_argument变量下看到我想要的数据。所以我知道数据在那里,但getter似乎不起作用。

使用ToastNotificationActionTrigger从后台任务中检索toast参数

所以事实证明我实际上是在尝试做:

    var arguments = details.argument;
    arguments.split(':');

而不是试图直接访问的详细信息。argument,这显然是无效的。

感谢@jay zoo msft帮助我认识到这一点。