我有一个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();
}
提前致谢!
答案 0 :(得分:0)
您需要注册后台任务来处理此案例。
官方Cortana voice command sample供您参考。
您可以查看AdventureWorksVoiceCommandService.cs以了解如何实现它。