2

所以我正在尝试使用后台任务将 Cortana 集成到我的通用 Windows 应用程序中,因为我需要与 Cortana 建立对话。

我从这里跟踪样本

上面的示例使用 IBackgroundTask 在 AdventureWorksVoiceCommandService 中构建对话和明确的行程名称匹配

所以我试图在一个非常基本的样本上做同样的事情:

using Windows.ApplicationModel.Background;

namespace AdventureWorks.VoiceCommands
{
    public sealed class TestBgService : IBackgroundTask
    {
        public async void Run(IBackgroundTaskInstance taskInstance)
        {
            var someVar = taskInstance;
        }
    }
}

我以这种方式更新了包清单:

  <Extensions>
    <uap:Extension Category="windows.appService" EntryPoint="AdventureWorks.VoiceCommands.TestBgService">
      <uap:AppService Name="TestBgService" />
    </uap:Extension>
  </Extensions>

我的 VCD 文件包含以下内容:

<Command Name="heyHowLetsGo">
  <Example> Hey How Lets Go </Example>
  <ListenFor RequireAppName="BeforeOrAfterPhrase">Hey How Lets Go</ListenFor>
  <VoiceCommandService Target="TestBgService"/>
</Command>  

在 AdventureWorks smaple 应用程序中运行它工作得很好(实际上是随机的,但 id 不会给我错误),当询问 Cortana 1 对 1 匹配字符串时,在我的通用 Windows 应用程序中运行相同的代码,她总是说:

出问题了。稍后再试

所以我假设她确实认出了命令模式(“Hey How Lets Go”),但是她不能吃午饭或运行 BackgroundTask 的一些奇怪的原因

最大的挫败点是,没有什么可怕的方法可以调试 Cortana 消息!!

如果我想知道到底出了什么问题-> 我没有办法做到这一点。

当错误发生时,我能够从那个东西中获得的唯一可能的输出是:

Exception thrown at 0x00007FFC15401F28 in SearchUI.exe: Microsoft C++ exception: wil::ResultException at memory location 0x0000007DF1CFD180.
Exception thrown at 0x00007FFC15401F28 in SearchUI.exe: Microsoft C++ exception: [rethrow] at memory location 0x0000000000000000.
Exception thrown at 0x00007FFC15401F28 in SearchUI.exe: Microsoft C++ exception: Js::JavascriptExceptionObject at memory location 0x0000007DFB9F7DC0.

拜托,如果有人有任何想法,请体验一下软件的平静 - >不要不回答就过去。我已经坐在这东西上一天多了,没有任何动静。

是的->我在启动项目中添加了带有BackgroundTask的项目作为参考->没有帮助

更新1:

  1. 因此,我设法通过将示例应用程序中的确切 VoiceCommandService 项目复制到我的应用程序并将其添加(这很重要)作为参考来运行测试 BackgroundTask(单击您的启动项目,在标题中的工具栏中进入项目 -> 添加参考 - >在那里添加你的项目)

  2. 将其添加为项目依赖项或参考路径 -> 效果为 0(*它太微软了,抱歉)

  3. 我在另一个链接到启动项目的 testService 作为 Reference 仍然给出了来自令人敬畏的 Cortana 的同样糟糕的响应

更新2:

好的,所以我设法强迫她开始与我的任务交谈!

  1. 为了让这些 BackgroundTask 工作,您需要将它们放在单独的项目中
  2. 该项目必须作为参考包含在您的 Statup 项目中
  3. 该项目的类型必须为:Windows 运行时组件
  4. 您的 BackgroundTask 不得包含构造函数 -> 否则 cortana 将放弃它。通过 Run() 方法进行初始化和其他操作

这可以被视为已解决。

4

0 回答 0