Windows Phone 8.1 GDR1 + Cortana 中文版的发布后相信很多中国的朋友正在happy的调戏着小娜同学。关于Cortana的应用场景也可参看我之前的文章。

那么如何让用户通过小娜来和你的应用来进行交互呢?下面我们来通过一个例子来学习如何使用小娜。

环境

首先是VS一定要是Visual Studio 2013 Update 2 或者 更新的,我这里使用的Update3

vs2013下载地址

然后需要安装 Windows Phone 8.1 Update and Emulators.

Windows Phone 8.1 Update and Emulators下载地址

如何开启模拟的小娜请看我之前的博文:Cortana(小娜)那些事儿

ps.建议安装vs的时候使用英文版,因为本人在之前安装的中文版中出现了在创建vcd文件时找不到http://schemas.microsoft.com/voicecommands/1.1 的情况,如果有类似情况的同学,可是尝试重新安装VS的英文版。然后再安装Windows Phone 8.1 Update and Emulators 问题应该就解决了.建议使用真机进行调试。因为本人在使用模拟器调试时,无论使用任何命令都会跳转到bing搜索。所以本人改用真机。

开始搞!

应用功能

这里我打算开发一个图片搜索应用来作为一个例子。 功能很简单将用户的语音命令直接到bing去搜索相应的图片。然后返回给用户。 (为了更专注于Cortana的功能- -就没写搜索功能,仅仅是简单的将用户的语音识别结果传送出来)

创建VCD文件

VCD(Voice Command Definition)文件是一个xml文档,用来定义所有你可以使用的语音命令。具体的使用请参考如下两个连接

Quickstart: Voice commands

Voice Command Definition (VCD) elements and attributes

首先在项目上右击选择添加新的项目如下图所示。

选择vcd文件

创建好文件后打开文件发现里面如下图已经有了很多代码,好我们先全部都删掉。 

替换为我们的代码

<?xml version="1.0" encoding="utf-8"?><VoiceCommands xmlns="http://schemas.microsoft.com/voicecommands/1.1">  <CommandSet xml:lang="zh-cn" Name="englishCommands"><CommandPrefix> Image </CommandPrefix><Example> Image </Example><Command Name="ImageSearch"><Example> find 'something' </Example><ListenFor> Search </ListenFor><ListenFor> Search [for] {dictatedSearchTerms} </ListenFor><ListenFor> Find {dictatedSearchTerms} </ListenFor><ListenFor> Find </ListenFor><Feedback> Searching on Bing...</Feedback><Navigate Target="MainPage.xaml" /></Command><PhraseTopic Label="dictatedSearchTerms" Scenario="Search"><Subject> ImageName </Subject></PhraseTopic></CommandSet>
</VoiceCommands>

安装VCD文件

创建好VCD文件是不够的,你必须安装你的VCD文件到你的系统上。如何安装呢?其实很简单就是在启动你的应用时能够执行一句安装vcd文件的命令即可。这里我们在Mainpage的OnNavigatedTo方法中来注册。复制下面的代码即可(别忘记把xml文件的地址改成自己的哦)

  protected override async void OnNavigatedTo(NavigationEventArgs e){if (e.NavigationMode == NavigationMode.New){var storageFile = await Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///VoiceCommandDefinition.xml"));await Windows.Media.SpeechRecognition.VoiceCommandManager.InstallCommandSetsFromStorageFileAsync(storageFile);}}

如果上面的都做完的你就可以尝试的运行下程序了,为了确定你vcd是否安装成功你可以打开小娜的查看更多选项然后拉倒最下面。看看你的应用是不是在下面(如下图所示),如果有了说明你的vcd文件已经注册成功,如果没有请确认的你vcd文件中的语言是否和你的设备的语言环境是相同的,如果不同也可能会无法安装你的vcd文件。 

ps. 注意你一定要在package.appxmanifest中开启Microphone不然运行会出现问题(语音功能不开mic怎么能行呢是吧^_^)

获取语音命令与控制

做完上面所有的事情后就剩下处理我们的语音命令了。

首先我们需要重写Application.OnActivated事件。确定是不是语音命令来启动我们的应用 的(通过判断IActivatedEventArgs.Kind 是不是 VoiceCommand)

然后我们获取我们语音命令的结果。

我尝试改写MSDN的例子并应用到我们的例子上:

     protected override void OnActivated(IActivatedEventArgs args){Frame rootFrame = Window.Current.Content as Frame;// 判断是否由语音命令启动if (args.Kind == Windows.ApplicationModel.Activation.ActivationKind.VoiceCommand){var commandArgs = args as Windows.ApplicationModel.Activation.VoiceCommandActivatedEventArgs;Windows.Media.SpeechRecognition.SpeechRecognitionResult speechRecognitionResult = commandArgs.Result;// 如果是的话获取语音命令的名字(vcd文件中的Command Name), 命令后用户说出的信息 以及 vcd Command/Navigate@Target 的值.string voiceCommandName = speechRecognitionResult.RulePath[0];string textSpoken = speechRecognitionResult.Text;string navigationTarget = speechRecognitionResult.SemanticInterpretation.Properties["NavigationTarget"][0];//判断当前命令式什么  <del>T_T 这里只有一个</del><del>switch (voiceCommandName){case "ImageSearch"://跳转到相应的page,并将所有说的东西都传过去。(为什么这么跳转?因为写的快- -|||)rootFrame.Navigate(typeof(ShowImage), textSpoken);break;default:rootFrame.Navigate(typeof(ShowImage), "nothing");break;}}}

然后创建一个新的page c#

<Page  x:Class="ImageFinder.ShowImage"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="using:ImageFinder"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"mc:Ignorable="d"Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"><Grid HorizontalAlignment="Center" VerticalAlignment="Center"> <TextBlock x:Name="textBlock" FontSize="50"   Text="nothing"></TextBlock></Grid>
</Page>

Xaml

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkID=390556namespace ImageFinder
{/// <summary>/// An empty page that can be used on its own or navigated to within a Frame./// </summary>public sealed partial class ShowImage : Page{public ShowImage(){this.InitializeComponent();}/// <summary>/// Invoked when this page is about to be displayed in a Frame./// </summary>/// <param name="e">Event data that describes how this page was reached./// This parameter is typically used to configure the page.</param>protected override void OnNavigatedTo(NavigationEventArgs e){textBlock.Text = e.Parameter.ToString();}}
}

运行试试

打开小娜对着她说 ImageFinder Search 测试 (呵呵中英混合看看她识别的怎么样) 非常nice她打开了我的应用并跳转到相应的页面,也将我的话打印出来了。

ps
注意测试时尽量使用语音,使用文字可能会出现直接跳转到bing的情况,也许是因为小娜现在还是bete版本的情况吧。

好了文章就到这里了,如果你在开发中遇到什么问题(我就遇到了不少= =)调试过不去请联系我的微博http://www.weibo.com/songzy982 我会尽力帮你解答的。

集成Cortana到你的应用中相关推荐

  1. 将MongoDB集成到您的Spring项目中

    本文展示了如何通过注释配置将MongoDB集成到您的spring项目中. 我们将从Gradle配置开始. group 'com.gkatzioura.spring' version '1.0-SNAP ...

  2. redis集成spring_将Redis集成到您的Spring项目中

    redis集成spring 本文介绍如何通过注释配置将Redis缓存集成到您的spring项目中. 我们将从Gradle配置开始. 我们将使用jedis驱动程序. group 'com.gkatzio ...

  3. 将Redis集成到您的Spring项目中

    本文展示了如何通过注释配置将Redis缓存集成到您的spring项目中. 我们将从Gradle配置开始. 我们将使用jedis驱动程序. group 'com.gkatzioura.spring' v ...

  4. 将Spring集成到旧版应用程序中

    所有Spring开发人员喜欢做的事情之一就是将Spring塞入他们正在工作的任何应用程序中–这是我生活中的罪恶感之一:您看到一些代码,认为它是垃圾,因为它包含几个众所周知的反模式,然后想想如果这个应用 ...

  5. 使用集成SOA网关的PL / SQL中的REST

    使用集成SOA网关的PL / SQL中的REST Oracle电子商务套件集成SOA网关(ISG)是一款开箱即用的模块,支持在Oracle Integration Repository中发布支持的接口 ...

  6. sso集成shiro_Keycloak SSO集成到jBPM和Drools Workbench中

    sso集成shiro 介绍 单一登录(SSO)和相关令牌交换机制正在成为Web上不同环境中身份验证和授权的最常见方案,尤其是在迁移到云中时. 本文讨论了Keycloak与jBPM或Drools应用程序 ...

  7. Keycloak SSO集成到jBPM和Drools Workbench中

    介绍 单一登录(SSO)和相关令牌交换机制正在成为Web上不同环境中进行身份验证和授权的最常见方案,尤其是在迁移到云中时. 本文讨论了Keycloak与jBPM或Drools应用程序的集成,以便使用K ...

  8. 集成学习voting Classifier在sklearn中的实现

    机器学习的算法有很多,对于每一种机器学习算法,考虑问题的方式都略微有所不同,所以对于同一个问题,不同的算法可能会给出不同的结果,那么在这种情况下,我们选择哪个算法的结果作为最终结果呢?那么此时,我们完 ...

  9. 模拟cmos集成电路设计_单级放大器中的噪声--CMOS模拟集成电路视频课程节选

    CMOS模拟集成电路设计课程链接:(还在连载中) https://study.163.com/course/introduction.htm?courseId=1209196830&share ...

最新文章

  1. HealthKit开发快速入门教程之HealthKit开发概述简介
  2. Maven解决静态资源过滤问题
  3. asp动态树菜单集合(3/3)
  4. Django搭建个人博客:上传头像图片
  5. C语言学习之输入一个大于三的值判断是否为素数
  6. Nginx负载均衡的原理及流程分析
  7. SQL Server中drop、truncate和delete语句的用法
  8. Teams Tab的Single Sign-On
  9. MSRA-万字综述 直击多模态文档理解
  10. Matlab求拉普拉斯变换和拉普拉斯反变换
  11. go-channel
  12. 小程序跳转至企业微信客服wx.openCustomerServiceChat
  13. React Fiber 04 - 渲染组件、节点更新、节点删除
  14. mpeg 音频格式科普
  15. 线条边框简笔画图片大全_植物简笔画素材大全赶紧收藏起来,一定用的上!
  16. 空气净化器上亚马逊需要提交UL867测试报告
  17. pycharm远程连接服务器完整教程
  18. python中24≤2825是否合法_在下列Python语句中非法的是() (2.0分)_学小易找答案
  19. AMBA总线协议(三)——一文看懂AHB总线所有协议总结(AHB2 AHB-Lite AHB5 )
  20. 百度云主机只能访问首页,bcloud_nginx_user.conf配置

热门文章

  1. PHP源代码加密后正常运行
  2. 新升级,新格局 |2022(第三届)全球数字经济产业大会9月盛大来袭!
  3. 复星医药遭员工举报:比长生生物更恶劣 多次遭美国FDA警告
  4. Android G711(PCMA/PCMU)、G726、PCM音频转码到AAC
  5. 工业物联网 | 智能网关实现换热站远程监控方案
  6. 【亲测好用】Mac窗口管理器:Moom for Mac
  7. 树莓派-SIM7600CE 4G部署(PPP拨号方式)
  8. java 日文全角转半角_java中全角转换为半角的方法
  9. 致10年前自己的一封信,谁与我同行
  10. oracle的各版本的名称