SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Silverlight 4で作る新しいRIAアプリケーション

Silverlight 4における信頼されたアプリケーション

Silverlight 4で作る新しいRIAアプリケーション(9)

  • X ポスト
  • このエントリーをはてなブックマークに追加

ダウンロード Source.zip (860.1 KB)

ユーザーの同意やユーザーが開始した操作に関する要件の緩和

 これまでの連載の中でも紹介したように、Silverlightでは、カメラやマイククリップボード、などのローカルデバイスにアクセスしたり、Silverlightのアプリケーションを全画面表示したりする場合、コードからデバイスにアクセスすると、図4のようなダイアログが自動的に表示されます。

 プログラムは、ユーザーが許可した場合に限り、一定時間だけデバイスにアクセスできます。

図4 デバイスへのアクセス許可ダイアログ
図4 デバイスへのアクセス許可ダイアログ

 また、デバイスにアクセスする場合は、必ずユーザーのアクション(ボタンのクリックなど)が起点になっている必要があります。例えば、ページのロード時にカメラの利用をリクエストしても、図4のダイアログは表示されず、デバイスの起動に失敗してしまいます。

 リスト3 は、本連載の2回目で利用したカメラを起動するコードですが、ボタンのクリックではなく、ページ移動時に自動的にカメラを起動するように修正しています。

 信頼されたアプリケーションでは、リスト3 のようにページがロードされたタイミングで、自動的にカメラを起動することが可能になります。

リスト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 のコードを実行しても特に例外などは発生しませんが、全画面表示には移行しません。

リスト4 ページのロード時に全画面を有効にする例
protected override void OnNavigatedTo(NavigationEventArgs e)
{
    App.Current.Host.Content.IsFullScreen = true;
}

 通常のSilverlightの場合、全画面表示時に補足できるキーは、矢印キー(↑↓←→)、スペースキー、タブキー、ページアップ、ページダウン、ホーム、エンド、エンターだけであったのに対し、信頼されたアプリケーションでは、ファンクションキーを含むほぼすべてのキーが補足できるようになります。

 リスト5 は、押されたキーを画面のTextBlockコントロールに表示しているサンプルです。

リスト5 キーの補足
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]キーを押したタイミングで全画面表示が解除されます。

図5 全画面表示起動時に表示されるメッセージ
図5 全画面表示起動時に表示されるメッセージ

 信頼されたアプリケーションで全画面表示を行った場合、このメッセージは表示されず、さらに[Esc]キーを押しても全画面表示は解除されません。このため、アプリケーション側で全画面表示を解除する必要があります。全画面の解除は、次のようなコードで実現できます。

App.Current.Host.Content.IsFullScreen = !App.Current.Host.Content.IsFullScreen;

次のページ
ローカルファイルシステムへのアクセス

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Silverlight 4で作る新しいRIAアプリケーション連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト かるあ (杉山 洋一)(カルア(スギヤマ ヨウイチ))

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5785 2011/04/12 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング