WindowsPhone中的VoiceCommand

来源:互联网 发布:mac手写输入法快捷键 编辑:程序博客网 时间:2024/05/01 12:18

很久没有学什么新技术了,最近接触了一下WindowsPhone中的VoiceCommand,就是Hold住开始键之后的弹框,和siri差不多的东西。


1. 如何使用

一般人应该挺少使用WindowsPhone的这个功能的,正如用肾机的人很少用siri一样- - 

你可以直接说“打开 微博”,“打开 + 应用名”,然后系统会自动识别然后打开相应应用。有一点要说的就是,如果你的手机语言设置为中文的话,类似QQ这种英文名是很难(根本就是无法)识别的。


另外,如果某些应用定制了自己的命令,大家也可以方便使用。想知道手机里哪些应用定制了?

在Hold住开始键之后,有上角有一个问号,点进去之后滑到右边的pivot就可以看到应用和相应指令。

要使用它们,首先要说出应用的名字,然后加上指令,比如“多米音乐 暂停音乐”。


2. 如何添加指令?

这个其实很方便,两部就好。

第一步:添加VoiceCommandDictionary文件(vcd文件)。

这个可以直接右键添加新建项加入到我们的项目中,一开始文件中会有一些example,这里举一个例子说明一下各个参数的含义:

<?xml version="1.0" encoding="utf-8"?> 
<VoiceCommands xmlns="http://schemas.microsoft.com/voicecommands/1.0">
<CommandSet xml:lang="en-US" 根据当前环境不同,你的可能是zh-cn 如果lang和手机的语言不对映的话,是无法使用的。所以多语言需要多个CommandSet

Name="todoVoiceCommands">   当前CommandSet的名字,在更新的时候会用到

<CommandPrefix>To Do List</CommandPrefix> 一般是应用名 就是在说这些指令之前的前缀
<Example>create new item</Example>


<Command Name="CreateNewItem"> 某条指令的开始
<Example>create new item</Example>  该指令所要做的事,在查询指令参数时需要
<ListenFor>create [a] new item</ListenFor> 用户可以说的话 []中代表可有可无的词
<ListenFor>add [an] item</ListenFor>
<Feedback>creating a new item... </Feedback> 返回给用户的字符串
<Navigate Target="NewListItemPage.xaml" /> 要跳转到的页面
</Command>
</CommandSet>
</VoiceCommands>

第二步,在程序中注册。

在MainPage.xaml中运行这段代码:

await VoiceCommandService.InstallCommandSetsFromFileAsync(new Uri("ms-appx:///ToDoListVoiceCommands.xml"));

然后再Hold开始按钮就可以出现了。


3.如何用指令传参数?

<Command Name="CreateNewItem">      <Example>create new item</Example>      <ListenFor>add [an] item {name}</ListenFor>      <Feedback>creating a new item... </Feedback>      <Navigate Target="AddItemPage.xaml" />    </Command>
在ListenFor中有一个{name}  这个name便是参数。参数的值也必须在vcd文件中定义。

<PhraseList Label="name">      <Item>Banana</Item>      <Item>Apple</Item>    </PhraseList>

而在跳转页面的OnNavigatedTo函数中,我们可以去获得这个参数。这里又要说一下当从语音指令进入某一个页面的时候,跳转的Uri的样子了:

/NewListItemPagex.xaml
?voiceCommandName=CreateNewItem
&reco=To%20Do%20List%20add%20an%20item&20Apple
&name=Apple%20name

所以可以直接去获得对应的name即可,这个涉及NavigationContext,就不说了。


4.动态添加参数的可选内容?

有时候我们无法枚举用户可能说的话,需要在程序中动态添加。

这个时候我们得把PhraseList中的值清空,即:

    <PhraseList Label="todoItem">    </PhraseList>
然后在代码中动态添加:

var vc = VoiceCommandService.InstalledCommandSets["todoVoiceCommands"];                await                    vc.UpdatePhraseListAsync("todoItem",                        MainPageViewModel.GetInstance().Items.Select(item => item.Name));

原创粉丝点击