2017-10-06 88 views
0

我有一個柯塔娜命令誰說一個名字,但如果應用這隻能是開放的。如果我用封閉的應用程序發佈命令,應用程序將打開,但不會啓動命令。我怎樣才能真正打開應用程序?打開應用與柯塔娜UWP

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(); 
    } 

提前感謝!

+0

所以這是在UWP中不可用的。最接近的是你打開cortana應用程序,然後說「FindName」,它會工作得很好 –

回答