Windows phone 8 这个新平台带给我们的惊喜还是很多的,其中内建支持中文语音命令,这点让人印象深刻.
我们可以通过编码为WP8程序添加语音交互的功能.比如场景如下:
拿人人客户端举例:用户可以任意界面长按home,然后对着手机说:"人人 发状态"那么这种场景下如果微博内部进行了处理,便可以相应并进入状态发布页面。如此是很棒的用户体验。那么我们要如何处理呢?
下面我们来模拟下这个场景(事实上人人客户端确实支持语音命令:-))
实现
1、配置语音控制文件
需要配置如下xml文件:
<?xml version="1.0" encoding="utf-8"?> <VoiceCommands xmlns="http://schemas.microsoft.com/voicecommands/1.0"> <CommandSet xml:lang="zh-cn"> <CommandPrefix>人人</CommandPrefix> <Example> 人人 发状态 </Example> <Command Name="Navigate"> <Example> 人人 发状态 </Example> <ListenFor> {Action} </ListenFor> <Feedback> 正在 {Action}... </Feedback> <Navigate Target="/Views/EditPage.xaml?Type=2&from=voiceCommand"/> </Command> <PhraseList Label="Action"> <Item> 发状态 </Item> <Item> 状态 </Item> </PhraseList> </CommandSet> </VoiceCommands>
我们分别看下文件中的结点对应的含义:
首先xml:lang这里由于我们要识别中文命令,那么需要将语言设置为zh-cn
CommandPrefix:命令的前缀 语音命令由前缀和具体命令组成
Example: 命令的例子,这个将出现在如下界面表示能识别的语音的例子
Command:一个command标签代表一个识别的命令
ListenFor:这个里面使用了{Action} Action在后面的PhraseList里面有定义,表明要识别
的命令为下面之一
FeedBack:这个是用户说完话之后系统说给用户的一段话
Navigate Target 故名思议,就是识别命令后要导航的程序内的目的地址(注意下由于我们的配置文件是xml类型所以当导航参数多的时候需要对&进行转义)
ParaseList:前面提到的要识别的命令,我们可以在其中加入任何想识别的文字比如<Item>走你</Item>
对这个文件的简单解释就到这里,这种配置文件的结构,我们在客户端内,只需要将VoiceCommand的处理方式和Second Tile保持一致即可
2、添加此文件到工程中(这步简单不用说了)
3、在客户端内添加初始化命令的代码
await VoiceCommandService.InstallCommandSetsFromFileAsync(new Uri("ms-appx:///Voice.xml",UriKind.Absolute));
此处有一点需要注意,这里需要使用上面格式的绝对路径,否则报错,具体原因是因为Uri类型问题(有兴趣的朋友可以自己找下先关文档)
另附上msdn对此处的文档:
http://msdn.microsoft.com/zh-cn/library/windowsphone/develop/jj206959(v=vs.105).aspx
如此我们便轻松添加语音控制到我们的程序,对于更高的业务需求本文没有涉及,只是让大家简单的了解下windows phone 8 的语音控制
如有问题欢迎与我留言交流,或者加入QQ群:182659848