Cortanaからアプリをバックグラウンド起動する – VoiceCommandServiceConnection

Cortanaからアプリの操作

UWPではCortanaに事前に音声コマンド定義ファイル(VoiceCommandDefinition)を登録しておくことによってCortanaに特定の言葉を発話させたときにアプリを起動させることができます。

CortanaからUWP起動はフォアグラウンド起動とバックグラウンド起動の2つのパターンがありますが今回はバックグラウンド起動のパターンです。

バックグラウンド起動の場合、アプリはAppServiceという仕組みを通してバックグラウンド起動し、特定の言葉をCortanaにしゃべらせることができます。

VoiceCommandDefinitionファイルを作る

VoiceCommandDefinitionファイルはここ

https://msdn.microsoft.com/ja-jp/library/windows/apps/xaml/dn706593.aspx

の定義に従って作ります。

  • CommandSet – 言語(ja-JP)単位で作ります。多言語対応する場合は複数作成
  • CommandPrefix – 認識したい言葉の前に必ずつけます
  • Example – 発話例
  • Command – 認識したいコマンドを定義。複数定義可
  • Example – 発話例
  • ListenFor – 認識したいコマンドを書きます。[]であってもなくてもよい、{}はPhraseListの中から選択することになります
  • Feedback – 認識完了したときCortanaに言わせる言葉
  • VoiceCommandService– 起動したいアプリのAppServiceを指定します。

フォアグラウンド起動の時と違う点は、NavigateがVoiceCommandServiceタグになっていることです。これでTargetに指定したAppServiceを起動することができます。

作ったVCDファイルはXMLとしてプロジェクトに保存しておきます。

VoiceCommandDefinitionファイルの登録

先ほど作ったVCDファイルをCortanaに登録します。

 

AppServiceを作る

新しいプロジェクトからWindowsランタイムコンポーネントを指定します。

1

今回は「CortanaSampleService」というWindowsRuntimeコンポーネントを作成しました。

次に元のUWP側の参照マネージャからさきほど作ったWindowsRuntimeコンポーネントを参照します。

2

マニフェストファイルを編集します。

宣言タブからAppServiceを追加し、名前を「VoiceAppService」、エントリポイントを「CortanaSampleService.SampleVoiceService」としました。

AppServiceを作成する

先ほど作ったWindowsRuntimeComponentに「SampleVoiceService」というクラスを作ります。

これでCortanaにしゃべりかけるとアプリがバックグラウンド起動します。

正常応答を返す

先ほどのSampleVoiceServiceクラスの「ここにレスポンス処理を書く」の部分に以下の処理を書くとCortanaが正常応答を返します。

異常応答を返す

先ほどの「ここにレスポンス処理を書く」の部分にこのような処理を書くと異常応答を返すことができます。

※図ではわかりにくいですが正常応答の時と音が違います

確認応答

YesかNoの確認応答をする場合は以下のようにします。