ユーザーの同意やユーザーが開始した操作に関する要件の緩和
これまでの連載の中でも紹介したように、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;
