Windows Phone8.1下的Cortana,可以通过语音的方式,打开、设置应用,进行页面跳转、执行任务。

我们先要创建VCD(VoiceCommand.xml)文件

  1. <?xml version="1.0" encoding="utf-8" ?>
  2.  
  3. <VoiceCommands xmlns="http://schemas.microsoft.com/voicecommands/1.1">
  4.  <!--1.0下,不含PhraseTopic元素, 不能识别任意的短语; 1.1下没有此限制-->
    <CommandSet xml:lang="zh-cn" Name="CommanSet1">  <!--中文-->
  5. <CommandPrefix>快递</CommandPrefix>  <!--程序名, 无次元素则为默认程序名(这个只是为了说话方便设定的)-->
  6. <Example>查快递</Example>
  7.   <!-- 以上两个将会显示在Cortana查看更多内-->
  8.  
  9.   <!--当上面点入后会进入到说话示例-->
  10. <!--命令-->
  11.  
  12.     <Command Name="Command1">
          <Example>扫描条形码</Example>
          <ListenFor>扫描条形码</ListenFor>
          <Feedback>跳转到条形码扫描页面</Feedback>
          <Navigate/>
        </Command>
  13. <Command Name="Command2">
  14. <Example>查询 + {快递名称}</Example>
  15. <ListenFor>查询{ExpressName}</ListenFor>  
  16. <Feedback>查询{ExpressName}</Feedback>  
  17. <Navigate/>
  18. </Command>
  19.  
  20. <Command Name="Command3">
  21. <Example>查询 + {快递名称} + {运单号}</Example>
  22. <ListenFor>[查询] {ExpressName} [运单][运单号] {order}</ListenFor> <!-- []表示可有可无的单词或短语 -->
  23. <Feedback>查询 {ExpressName} 运单号:{order}</Feedback>
  24. <Navigate/>
  25. </Command>
  26.  
  27. <!--0个或一个-->
  28. <PhraseList Label="ExpressName"> <!--用大括号 {}引用 同时用于ListenFor、Feedback元素中-->
  29. <Item>申通快递</Item>
  30. <Item>圆通快递</Item>
  31. <Item>顺丰快递</Item>
  32. </PhraseList>
  33.  
  34. <PhraseTopic Label="order" Scenario="Short Message">  <!--可识别任意语句-->
  35. <Subject>Order</Subject>
  36. </PhraseTopic>
  37.  
  38. </CommandSet>
  39. </VoiceCommands>

上面的VCD文件中3个语音命令功能:

Command1: 识别“快递 扫描条形码”,并跳转到扫描页面。

Command2: 识别“快递 查询{快递名称}”, 并跳转到主页面,将识别到的快递名称;      {快递名称}为申通、圆通、顺丰中一个

Command3: 识别“快递 [查询] {快递名称} [运单][运单号] {自己说的话,这里为运单号}”;      []为可有可无

这三个命令应该可以代表所有了吧。

VCD文件创建好后,就开始初始化VCD文件 主页面中:

  1. using Windows.Media.SpeechRecognition;
  2.  
  3. protected async override void OnNavigatedTo(NavigationEventArgs e)
  4. {
  5. base.OnNavigatedTo(e);
  6. if (VoiceCommandManager.InstalledCommandSets.Count == )
  7. {
  8. StorageFile file = await Windows.ApplicationModel.Package.Current.
  9. InstalledLocation.GetFileAsync("VoiceCommand.xml");
  10. await VoiceCommandManager.InstallCommandSetsFromStorageFileAsync(file);
  11. }
  12.     }

从Cortana执行语音命令

App.cs中

  1. protected override void OnActivated(IActivatedEventArgs args)
  2. {
  3. if (args.Kind == ActivationKind.VoiceCommand)  //应用在语音命令后激活
  4. {
  5. VoiceCommandActivatedEventArgs voiceCommandArgs = args as VoiceCommandActivatedEventArgs;
  6. Frame rootFrame = new Frame();
  7.  
  8.            string result = voiceCommandArgs.Result.Text;  //识别到的结果
  9.          
             if (result.Contains("运单"))
                     rootFrame.Navigate(typeof(MainPage), voiceCommandArgs);//传递参数,之后在新页面接受处理
  10.   else if (result.Contains("条形码"))
  11.   rootFrame.Navigate(typeof(BarCodeScanPage));
  12. else if (result.Contains("查询"))
                        rootFrame.Navigate(typeof(MainPage), voiceCommandArgs);
  13. Window.Current.Content = rootFrame;
  14. Window.Current.Activate();
  15. }
  16. }

这样就完成了,小娜真的很好用. 以后的应用应该很多都会支持语音命令吧。

WP8.1下 Cortana语音命令 VCD文件 设计的更多相关文章

  1. linux 下用find命令查找文件,rm命令删除文件

    linux 下用find命令查找文件,rm命令删除文件. 删除指定目录下指定文件find 要查找的目录名 -name .svn |xargs rm -rf 删除指定名称的文件或文件夹: find -t ...

  2. Windows phone 8.1应用集成cortana语音命令

    微软推出小娜已经有一段时间了,最近恰好在研究其用法,就随便写点记录一下自己的心得. 在研究时参考了@王博_Nick的博客:http://www.cnblogs.com/sonic1abc/p/3868 ...

  3. windows下使用RoboCopy命令进行文件夹增量备份

    RoboCopy,它是一个命令行的目录复制命令,自从Windows NT 4.0 开始就成为windows 资源工具包的一部分,然后在Windows Vista.Windows 7和 Windows ...

  4. Mac OS 终端下使用 Curl 命令下载文件

    在 mac os下,如何通过命令行来下载网络文件?如果你没有安装或 wget 命令,那么可以使用 curl 工具来达到我们的目的. curl命令参数: curl 'url地址' curl [选项] ' ...

  5. CMD下利用subst命令将一个文件夹镜像成本地的一个虚拟磁盘

    我们都知道net use可以建立网络驱动器映射,这里不说了. 我今天刚看到这命令的,叫镜像虚拟磁盘subst命令,这个命令可以简化好多操作,比如一个常用的文件放在一个路径很深的文件夹中,每次我们想要操 ...

  6. linux 下使用scp命令传输文件

    scp -P 1234 /home/wakasann/test.txt wakasann@192.168.1.30:/var/www/html/ 使用 1234端口,将 test.txt文件传输到服务 ...

  7. mac下通过mdfind命令搜索文件

    mdfind命令就是Spotlight功能的终端界面,这意味着如果Spotlight被禁用,mdfind命令也将无法工作.mdfind命令非常迅速.高效.最基本的使用方法是: mdfind -name ...

  8. ubuntu 下通过ftp命令下载文件

    /*连接*/ $ ftp 192.168.180.2Connected to 192.168.180.2.Name (192.168.180.2:rivsidn): admin  Password: ...

  9. windows下使用linux命令搜文件

    在linux系统的黑幕下,我们只能通过find命令来搜文件,而在windows的界面里,我们只能通过搜索框来搜.两者各有利弊,前者单调但高效,后者用户体验好却比较慢.能不能在windows使用linu ...

随机推荐

  1. 开发一个jQuery插件——多级联动菜单

    引言 开发中,有好多地方用到联动菜单,以前每次遇到联动菜单的时候都去重新写,代码重用率很低,前几天又遇到联动菜单的问题,总结了下,发现可以开发一个联动菜单的功能,以后想用的时候就方便多了.项目中每个页 ...

  2. Unity 依赖注入知识点

    三种依赖注入方法,构造器注入.属性注入.方法注入 可以配置Config文件,来实现不用修改代码.需要先将接口与实体关联,然后使用时会自动加载对应实体. namespace WeChatConsole ...

  3. HTML5学习总结-03 地理定位

    一 地理定位 HTML5 Geolocation(地理定位)用于定位用户的位置. 1 地理定位 地理位置 经度  :   南北极的连接线 纬度  :   东西连接的线 位置信息从何而来: IP地址 G ...

  4. iOS - Runloop个人总结

    调用堆栈: 程序运行之前,自上而下启动 iOS端用的所用系统framework都是动态链接的. dyld:The dynamic link editor 动态链接器

  5. POJ1236Network of Schools(强连通分量 + 缩点)

    题目链接Network of Schools 参考斌神博客 强连通分量缩点求入度为0的个数和出度为0的分量个数 题目大意:N(2<N<100)各学校之间有单向的网络,每个学校得到一套软件后 ...

  6. Linux 常用命令笔记 (持续更新)

    声明:本文是转载前辈的,地址:http://www.cnblogs.com/tovep/articles/2473147.html 在tomcat的bin目录下执行 ./shutdown.sh 为了查 ...

  7. 【原】requirejs学习笔记

    随着JS越来越庞大,已经不仅仅是以前复制粘贴做特效的时代了,JS越来越偏向于业务逻辑与应用.JS在web开发中占有越来越重要的地位. 由于JS代码庞大,文件数目多,传统的使用<script sr ...

  8. openssl生成https证书 (转)

    1.首先要生成服务器端的私钥(key文件):openssl genrsa -des3 -out server.key 1024运行时会提示输入密码,此密码用于加密key文件去除key文件口令的命令:o ...

  9. myeclipse+tomcat内存溢出

  10. 最简单的jQuery插件

    <script src="./jquery-1.7.1.min.js"></script><script>;(function($,undefi ...