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();
}
提前感謝!
所以這是在UWP中不可用的。最接近的是你打開cortana應用程序,然後說「FindName」,它會工作得很好 –