首页 文章

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

提问于
浏览
2

我试图从后台任务中的Toast通知中检索参数,但是在Microsofts网站上推荐的方法不起作用 .

我在我的主要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>

详细信息变量只是空,但if语句条件为真?此外,当我断开代码并逐步执行时,visual studio无法查看taskInstance.triggerDetails的当前状态...

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

更新:当我点击Toast通知按钮并在Visual Studio中查看变量时,我已经明确了后台任务,我可以在Native Implementation上的_PiEventDetails中的m_argument变量下看到我想要的数据 . 所以我知道数据存在,但吸气剂似乎不起作用 .

1 回答

  • 0

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

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

    而不是试图直接访问details.argument,这显然是无效的 .

    谢谢@ jay-zuo-msft让我意识到这一点 .

相关问题