[技術探討]使用Cortana 啟動UWP 應用程式

Cortana 啟動UWP

最近開始練習寫UWP APP,所以被指派要研究如何利用Cortana啟動NAS備份還原的App Solter Center。說的簡單一點,要讓用Cortana與APP互動,就像是寫好了腳本,唸到指定的句子,Coratan就會傳達關鍵字給你的APP,進而做到溝通的效果,接下來就簡單的介紹如使用 Cortana啟動UWP 應用程式。

流程簡介

Cortana 啟動UWP

如上圖所示,如果要用使用Cortana啟動APP就必須先建立自己的VCD(Voice Command Definition) File,來定義對話內容以及指令內容,再來必須在UWP 的OnLaunched 事件時將建好的VCD檔案安裝到電腦裡,所以當你第一次啟動APP時,在Cortana的清單內就會看到你建立的對話Example,所以當你對Cortana說出你指定的Command時,就會觸發到UWP 的OnActivated事件,接下來就可以針對接收到的指令進行進一步的動作。其實動作都很簡單,其中最重要的就是要設計好你的VCD File,就能簡單使用Cortana的對APP下指令。

Cortana 啟動UWP

Voice Command Definition

VCD File 是一個XML格式的文件,現在最新的Namespace為voice commands 1.2,以下就用一個簡單的範例來說明VCD的運作。

Cortana 啟動UWP

在上圖的範例中,必須對Cortana 說 “Holle World , Call Command Test One” ,才會觸發事件,第4行中的Hello World為App的名稱,在對Cortana下Voice Commands時必須先說你的<AppName>再接著指令的部分,其中所有的<Example>都是提示作用,並不會影響你的Command;在<Command>中 屬性Name為在觸發事件時用來分辨指令的名稱,在<Command>裡面必須包含四個標籤,分別為<Example>、<ListenFor>、<Feedback>、<Navigate>,以下用條列式來說明個標籤的意義及用法。

  • <Example>:用來提示的範例,並不會影響實際執行的文字。會出現在Cortana介面中的Help選項中(如流程簡介中圖片)。
  • <ListenFor>:為主要的Command,其中包含兩中寫法,在第7行中有使用”[]”以及”{}”標示的文字是具有意義的;使用”[]”標示的文字稱作”Word”,其意義為” 選擇性使用的語句”,所以在這個範例裡,也可以只說” Holle World , Command Test One”;在來使用”{}”標示的文字稱作”Phrase”,其意義為選擇性的指令,要對應到第12行<PhraseList>的Name屬性,代表使用者下指令時必須含有<PhraseList>內的關鍵字才能執行,但也可以使用”{*}”的方式,這樣代表這個Phrase的關鍵字為任意值,一律都會被回傳當作參數。
  • <Feedback>:這裡為Cortana回覆的語句,這裡也可以使用”Phrase”來當作回應的標準。
  • <Navigate>:當觸發Voice Command後可以透過Target指定要顯示的頁面,也可以使用QueryString,例如” <Navigate Target=”Page1.xaml?TestParam=One”/>”。

在 OnLaunched 時安裝你的VCD File

在UWP裡的App.xaml.cs裡的OnLaunched事件裡加入安裝的VCD File指令,指令如下:

Cortana 啟動UWP

在OnActivated時處理Voice Command

當App被Cortana呼叫時,會直接觸發 OnActivated 事件,而不會呼叫OnLaunched事件,所以要再App.xaml.cs內override OnActivated事件,簡單的範例如下:

Cortana 啟動UWP

其中,第3行的地方用來判斷是否為Voice Commands,接著把收到的Args轉換為VoiceCommandActivatedEventArgs(App透過語音命令啟動時,應用程式所啟動的事件資訊),在第7行的部分,可以取得使用者說出指令的名稱(voiceCommandsName),就可以利用voiceCommandsName進一步去處理語音指令了。在第11行的部分是取出使用者指定的Phrase選項,這裡可以進一步再去做判斷和處理。

這樣就完成了簡單的使用Cortana與UWP App之間的互動,使用情境不同,可以多花點心思設計VCD的部分,可以讓語音指令更靈活。Cortana的應用還有很多不同的用法,甚至可以與UWP的BackgroundTask互動,還有很多是可以去研究以及開發的。

Comments

No comments yet. Why don’t you start the discussion?

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料