設定コントラクト
設定コントラクトは、チャームの設定ボタンから呼び出されアプリケーションの設定を行える機能です。
画像のように設定チャーム起動時にメニューを追加、追加したメニューから設定を行うページを表示します。
設定コントラクトの追加
設定コントラクトの追加は、以下のように行います。
// チャームから設定が呼び出された際のイベントハンドラー SettingsPane.GetForCurrentView().CommandsRequested += onCommandsRequested; } /// <summary> /// 設定コントラクトが呼び出された際に実行される /// ここでメニュー項目を追加する /// </summary> /// <param name="settingsPane"></param> /// <param name="eventArgs"></param> public void onCommandsRequested(SettingsPane settingsPane, SettingsPaneCommandsRequestedEventArgs eventArgs) { UICommandInvokedHandler handler = new UICommandInvokedHandler(onSettingsCommand); SettingsCommand generalCommand = new SettingsCommand("generalSettings", "このアプリについて", handler); eventArgs.Request.ApplicationCommands.Add(generalCommand); } void onSettingsCommand(IUICommand command) { // 「このアプリについて」メニューを選択した際の処理を書く }
SettingsPane.GetForCurrentView().CommandsRequestedイベントハンドラーに、設定チャームから設定が押された際に呼び出されるハンドラーを設定します。続いて、イベントハンドラーで設定メニューの追加を行います。
設定コントラクトで画面端3分の1ほどに設定メニューが表示される表示方法があります。この表示をチャームフライアウトと言います。しかし、チャームフライアウトのコントロールはC#には存在しません(HTML+JavaScriptのプロジェクトには存在します)。
XAML+C#プロジェクトでチャームフライアウトを利用したい場合は、NuGetからダウンロードできる「CharmFlyout」を利用しましょう。
リモート再生コントラクト
リモート再生コントラクトを利用すると音声、ビデオなどをコンピューターから別のデバイスにストリーミングすることができます。
リモート再生コントラクトも送信側と受信側という2つの側面があります。受信側はストアアプリに限らずPlay Toに対応したデバイスであれば受信可能です。
送信側の作成
リモート再生の送信側は、チャームのデバイス選択時に受信対応デバイスが選択されると以下のコードで配信を行います。
playToManager = PlayToManager.GetForCurrentView(); playToManager.SourceRequested += playToManager_SourceRequested; } void playToManager_SourceRequested(PlayToManager sender, PlayToSourceRequestedEventArgs args) { var deferral = args.SourceRequest.GetDeferral(); var handler = dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { args.SourceRequest.SetSource(VideoSource.PlayToSource); deferral.Complete(); }); }
PlayToManagerクラス、PlayToSourceRequestedEventArgsクラスを利用します。
受信側の作成
受信側はPlayToReceiverクラスを用いて配信を待機します。待機はPlayToReceiverクラスのStartAsyncメソッドを利用します。
まとめ
今回はWindowsストアアプリケーションの特徴的な機能、「コントラクト」について紹介しました。コントラクトを利用することで、ストアアプリのガイドラインに沿ったアプリ作成が可能になり、ほかのストアアプリやOSの機能を借りてより自分のアプリケーションを機能豊かなものにすることができます。
次回以降も引き続き残りコントラクトを紹介していきますので、ぜひ理解してストアアプリ開発に役立ててください。