モバイル デバイスのカメラ UI の機能

この記事では、モバイル デバイス上にのみある特殊カメラの UI 機能を活用する方法を示します。

モバイル拡張をプロジェクトに追加する

これらの機能を使用するには、ユニバーサル アプリ プラットフォーム用 Microsoft Mobile Extension SDK への参照をプロジェクトに追加する必要があります。

ハードウェア カメラ ボタンのサポート用にモバイル拡張 SDK への参照を追加するには

  1. ソリューション エクスプローラーで、[参照] を右クリックし、[参照の追加] を選択します。

  2. [Windows ユニバーサル] ノードを展開し、[拡張機能] を選びます。

  3. [Microsoft Mobile Extension SDK for Universal App Platform](ユニバーサル アプリ プラットフォーム用 Microsoft Mobile Extension SDK) チェック ボックスをオンにします。

ステータス バーを非表示

モバイル デバイスには、デバイスに関する状態情報をユーザーに通知する StatusBar コントロールがあります。 このコントロールが表示される領域は、画面上でメディア キャプチャ UI の表示に干渉する可能性があります。 HideAsync を呼び出すことでステータス バーを非表示にできますが、呼び出しは、この API が利用可能かどうかを ApiInformation.IsTypePresent メソッドで確認する条件ブロック内で行う必要があります。 このメソッドは、ステータス バーをサポートするモバイル デバイスでのみ true を返します。 アプリの起動時や、またはカメラからプレビューを開始するときには、ステータス バーを非表示にする必要があります。

// Hide the status bar
if (ApiInformation.IsTypePresent("Windows.UI.ViewManagement.StatusBar"))
{
    await Windows.UI.ViewManagement.StatusBar.GetForCurrentView().HideAsync();
}

アプリをシャットダウンするときや、ユーザーがアプリのメディア キャプチャ ページから移動するときは、コントロールを再び表示できます。

// Show the status bar
if (ApiInformation.IsTypePresent("Windows.UI.ViewManagement.StatusBar"))
{
    await Windows.UI.ViewManagement.StatusBar.GetForCurrentView().ShowAsync();
}

ハードウェア カメラ ボタンを使う

一部のモバイル デバイスには、専用のハードウェア カメラ ボタンが用意されていることがあります。この仕様は、ユーザーによっては画面上のコントロールより好まれます。 このハードウェア カメラ ボタンが押されたときに通知を受け取るには、HardwareButtons.CameraPressed イベントのハンドラーを登録します。 この API を利用できるのはモバイル デバイスのみであるため、この場合も IsTypePresent を使用して、この API が現在のデバイスでサポートされているかどうかをアクセス前に確認する必要があります。

using Windows.Phone.UI.Input;
if (ApiInformation.IsTypePresent("Windows.Phone.UI.Input.HardwareButtons"))
{
    HardwareButtons.CameraPressed += HardwareButtons_CameraPressed;
}

CameraPressed イベントのハンドラーで、写真のキャプチャを開始できます。

private async void HardwareButtons_CameraPressed(object sender, CameraEventArgs e)
{
    await TakePhotoAsync();
}

アプリをシャットダウンするときや、ユーザーがアプリのメディア キャプチャ ページから移動するときは、ハードウェア ボタンのハンドラーを登録解除します。

if (ApiInformation.IsTypePresent("Windows.Phone.UI.Input.HardwareButtons"))
{
    HardwareButtons.CameraPressed -= HardwareButtons_CameraPressed;
}