ユーザーの同意やユーザーが開始した操作に関する要件の緩和
これまでの連載の中でも紹介したように、Silverlightでは、カメラやマイク、クリップボード、などのローカルデバイスにアクセスしたり、Silverlightのアプリケーションを全画面表示したりする場合、コードからデバイスにアクセスすると、図4のようなダイアログが自動的に表示されます。
プログラムは、ユーザーが許可した場合に限り、一定時間だけデバイスにアクセスできます。
また、デバイスにアクセスする場合は、必ずユーザーのアクション(ボタンのクリックなど)が起点になっている必要があります。例えば、ページのロード時にカメラの利用をリクエストしても、図4のダイアログは表示されず、デバイスの起動に失敗してしまいます。
リスト3 は、本連載の2回目で利用したカメラを起動するコードですが、ボタンのクリックではなく、ページ移動時に自動的にカメラを起動するように修正しています。
信頼されたアプリケーションでは、リスト3 のようにページがロードされたタイミングで、自動的にカメラを起動することが可能になります。
protected override void OnNavigatedTo(NavigationEventArgs e) { // 1.デバイスへのアクセス許可を調査する。 if (!(CaptureDeviceConfiguration.AllowedDeviceAccess || CaptureDeviceConfiguration.RequestDeviceAccess())) { MessageBox.Show("デバイスの起動に失敗しました。"); return; } // 2.デバイスを操作するためのCaptureSourceを作成する。 _captureSource = new CaptureSource() { VideoCaptureDevice = CaptureDeviceConfiguration.GetDefaultVideoCaptureDevice(), AudioCaptureDevice = CaptureDeviceConfiguration.GetDefaultAudioCaptureDevice(), }; // 3.ビデオブラシを作成し、動画を表示する。 var brush = new VideoBrush(); brush.SetSource(_captureSource); webCamDisplay.Fill = brush; // 4.ビデオデバイスからデータの取得を開始する。 _captureSource.Start(); }
全画面表示サポート
通常のSilverlightアプリケーションの場合、ページを全画面表示するためには、ユーザーが開始した操作である必要がありましたが、信頼されたアプリケーションの場合は、リスト4 のように、ページのロード時などのタイミングで全画面表示を行うことができます。信頼されたアプリケーション以外で、リスト4 のコードを実行しても特に例外などは発生しませんが、全画面表示には移行しません。
protected override void OnNavigatedTo(NavigationEventArgs e) { App.Current.Host.Content.IsFullScreen = true; }
通常のSilverlightの場合、全画面表示時に補足できるキーは、矢印キー(↑↓←→)、スペースキー、タブキー、ページアップ、ページダウン、ホーム、エンド、エンターだけであったのに対し、信頼されたアプリケーションでは、ファンクションキーを含むほぼすべてのキーが補足できるようになります。
リスト5 は、押されたキーを画面のTextBlockコントロールに表示しているサンプルです。
private void LayoutRoot_KeyDown(object sender, KeyEventArgs e) { pressKey.Text = string.Format("{0}({1})", e.Key.ToString(), e.PlatformKeyCode); }
実行してみると、信頼されたアプリケーションとして実行した場合と、そうでない場合で補足できるキーが違うことを確認できます。
補足できるキーの種類については、少し注意が必要です。
MSDNの全画面表示の記述では、信頼されたアプリケーションではすべてのキーが全画面表示であっても取得可能であると記述されていますが、筆者が試した限りでは[ScrLkキー]や[Windowsキー]などはキーコードは取れましたが、e.KeyはUnknownとして表示され、[PrtScキー]や[F10キー]は何も表示されませんでした。どうやら、SilverlightやOSが取得してしまう一部のキーに関しては、信頼されたアプリケーションであっても取得できないようです。
信頼されたアプリケーション以外で、アプリケーションを全画面表示に移行した場合、図5のメッセージが表示され、[Esc]キーを押したタイミングで全画面表示が解除されます。
信頼されたアプリケーションで全画面表示を行った場合、このメッセージは表示されず、さらに[Esc]キーを押しても全画面表示は解除されません。このため、アプリケーション側で全画面表示を解除する必要があります。全画面の解除は、次のようなコードで実現できます。
App.Current.Host.Content.IsFullScreen = !App.Current.Host.Content.IsFullScreen;