使用Cortana UWP打开应用程序

时间:2017-10-06 11:39:45

标签: c# uwp cortana

我有一个Cortana的命令,他说一个名字,但这只适用于App是开放的。如果我使用已关闭的应用程序发出命令,应用程序将打开,但不会启动该命令。我怎样才能真正打开应用程序?

CortanaCommand.xml:

<CommandSet xml:lang="en-us" Name="ExampleAppCommandSet_en-us">
<CommandPrefix> Open name </CommandPrefix>
<Example> Find a name </Example>
<Command Name="FindName">
  <Example> Find name  </Example>
  <ListenFor> Find name </ListenFor>
  <ListenFor> Find name </ListenFor>
  <Feedback> Find name </Feedback>
  <Navigate/>
</Command>

App.xaml.cs(公共应用):

public App()
    {
        Microsoft.ApplicationInsights.WindowsAppInitializer.InitializeAsync(
           Microsoft.ApplicationInsights.WindowsCollectors.Metadata |
           Microsoft.ApplicationInsights.WindowsCollectors.Session);
        this.InitializeComponent();
        this.Suspending += OnSuspending;
    }

App.xaml.cs(OnActivated):

protected override void OnActivated(IActivatedEventArgs e)
    {
        // Was the app activated by a voice command?
        if (e.Kind != Windows.ApplicationModel.Activation.ActivationKind.VoiceCommand)
        {
            return;
        }

        var commandArgs = e as Windows.ApplicationModel.Activation.VoiceCommandActivatedEventArgs;

        var speechRecognitionResult = commandArgs.Result;
        string voiceCommandName = speechRecognitionResult.RulePath[0];
        string textSpoken = speechRecognitionResult.Text;

        Frame rootFrame = Window.Current.Content as Frame;
        MainPage page = rootFrame.Content as MainPage;
        if (page == null)
        {
            return;
        }

        switch (voiceCommandName)
        {
            case "FindName":
                page.FindNameInList();
                break;

            default:
                // There is no match for the voice command name.
                break;
        }
    }

MainPage.xaml.cs中:

private async void Page_Loaded(object sender, RoutedEventArgs e)
    {
        var storageFile =
          await Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(
            new Uri("ms-appx:///CortanaCommand.xml"));
        await Windows.ApplicationModel.VoiceCommands.VoiceCommandDefinitionManager
            .InstallCommandDefinitionsFromStorageFileAsync(storageFile);
    }

    public async void FindNameInList()
    {
        MediaElement mediaElement = new MediaElement();

        // The object for controlling the speech synthesis engine (voice).
        var synth = new Windows.Media.SpeechSynthesis.SpeechSynthesizer();

        // Generate the audio stream from plain text.
        SpeechSynthesisStream stream = await synth.SynthesizeTextToStreamAsync("Your name, is, Jhon");

        // Send the stream to the media object.
        mediaElement.SetSource(stream, stream.ContentType);
        mediaElement.Play();
    }

提前致谢!

1 个答案:

答案 0 :(得分:0)

您需要注册后台任务来处理此案例。

官方Cortana voice command sample供您参考。

您可以查看AdventureWorksVoiceCommandService.cs以了解如何实现它。