このページは役に立ちましたか。
このページのコンテンツについての ご意見をお待ちしております
その他にご意見はありますか。
残り 1500 文字
エクスポート (0) 印刷
すべて展開
情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

Windows Phone 8 のリッチ メディア機能拡張

2014/06/18

対象: Windows Phone 8 および Windows Phone Silverlight 8.1 のみ

 

リッチ メディア アプリは、ローカル フォルダーまたは Web からデータを組み込み、キャプチャしたイメージを表示または編集するためのユニークなエクスペリエンスを提供します。このトピックでは、アプリでリッチ メディア機能拡張を組み込み、組み込みのフォト ビューアー エクスペリエンスを拡張する方法について説明します。レンズ アプリはリッチ メディア機能拡張を使用できますが、レンズ機能拡張を使用するためにリッチ メディア アプリは必要ありません。レンズの詳細については、「Windows Phone 8 のレンズ」を参照してください。

メモメモ:

このトピックで示すコード例の多くは、Photo Extensibility Sample に含まれています。

アプリが Windows Phone ストア の認可を確実に受けるためには、リッチ メディア アプリ認証の要件を確認します。詳細については、「Windows Phone の特定のアプリの種類に関する追加の要件」を参照してください。

このトピックは、次のセクションで構成されています。

 

リッチ メディア アプリは、メディア ライブラリに保存されている写真をローカル フォルダーに保存されているデータに結び付けて、ユニークなアプリ内エクスペリエンスを提供します。たとえば、ソーシャル メディア アプリの場合は、キャプチャしてメディア ライブラリに保存した写真と Web サービスから取得したデータを結び付けることで、友人が写真に対して投稿したコメントをユーザーが確認できるようにすることができます。スライドショー アプリの場合は、ユーザーは現在の写真が含まれるスライドショーを表示できます。

メディア ライブラリに格納できるのは JPG ファイルのみに制限されますが、写真に関する追加情報をアプリのローカル フォルダーに格納することができます。情報をリンクするために、Picture クラスの GetPath 拡張メソッドによって返されるパスにより写真を識別できます。GetPath を使用するには、Microsoft.Xna.Framework.Media.PhoneExtensions へのディレクティブを追加します。

リッチ メディアのオープン リンクを従来の写真編集に使用しないでください。従来の写真編集は、カメラ ロールにある JPG ファイルのビット操作のみに制限されています。リッチ メディア機能拡張は、写真に関して持っている追加の情報を使用して "リッチ編集" を行うアプリを対象としています。たとえば、追加の写真がアプリのローカル フォルダーに格納されている場合、ユーザーが "指定された期間" のキャプチャから別の写真を選択できるようにすることは、リッチ編集と見なされます。オープン リンクは、ユーザーが写真をアプリ内で表示することで、そのエクスペリエンスが向上する場合にのみ使用してください。ビット操作、トリミング、明るさの調整、回転など、従来の写真の編集には、編集リンクかアプリ リンクを使用します。編集リンクは Windows Phone 8 写真編集アプリに、アプリ リンクは Windows Phone OS 7.1 写真編集アプリに使用します。

メモメモ:

オープン リンクは、リッチ メディア アプリがメディア ライブラリに保存した JPG ファイルにのみ表示されます。編集リンクおよびアプリ リンクは、メディア ライブラリに保存されているすべての JPG ファイルに表示されます。

リッチ メディア アプリで写真をメディア ライブラリに保存すると、オペレーティング システムは、そのアプリで写真をキャプチャしたことを "記憶" します。そのため、ユーザーがフォト ビューアーで写真を表示すると、フォト ビューアーには、写真と共にキャプチャ元を示すサブタイトルが表示されます。アプリ バーには、アプリを起動するための特別なオープン リンクが表示されます。次のイメージは、オープン リンクおよびキャプチャされたキャプションを示します。

Extending the photo viewer open link.

次の手順では、リッチ メディア アプリを写真のエクスペリエンスに統合する方法について説明します。

Windows Phone 8 アプリがメディア ライブラリの写真にアクセスするには、ID_CAP_MEDIALIB_PHOTO 機能を使用する必要があります。機能はアプリのマニフェスト ファイル WMAppManifest.xml で指定します。

<!-- For accessing photos in the media library. -->
<Capability Name="ID_CAP_MEDIALIB_PHOTO" />

リッチ メディア アプリであることを宣言するには、アプリを Photos_Rich_Media_Edit 拡張機能に登録する必要があります。拡張機能は WMAppManifest.xml ファイルで指定します。Tokens 要素の直後、Extensions 要素内で、次の Extension 要素を使用してリッチ メディア拡張機能を指定します。

<Extension ExtensionName="Photos_Rich_Media_Edit" 
           ConsumerID="{5B04B775-356B-4AA0-AAF8-6491FFEA5632}" 
           TaskID="_default" />

Windows Phone のマニフェスト デザイナーは拡張機能をサポートしていません。拡張機能を編集するには、XML (テキスト) エディターを使用します。詳細については、「Windows Phone 8 のアプリ マニフェスト ファイルを変更する方法」を参照してください。

ユーザーがオープン リンクを持つアプリをタップすると、ディープ リンク URI が起動されてアプリが開き、ユーザーが表示していた写真にトークンが送信されます。URI に文字列 RichMediaEdittoken が含まれている場合、アプリはリッチ メディア起動を認識できます。次に示すのは、リッチ メディア アプリの起動 URI の例です (既定のナビゲーション ページが MainPage.xaml であるときは、URI マッパーからわかります)。

/MainPage.xaml?Action=RichMediaEdit&token=%7Bed8b7de8-6cf9-454e-afe4-abb60ef75160%7D

この例では、token パラメーター値はトークンです。その文字列を使用すると、メディア ライブラリから写真を取得できます。これについては、このトピックで後述します。

オープン リンクは既定のナビゲーション ページ (この場合は MainPage.xaml) をターゲットとするため、URI マッピングを実装していない場合は、そのページが起動されます。アプリの既定のナビゲーション ページが、トークンによって参照される写真を処理できる場合、URI マッピングは必要ありません。

ただし、リッチ メディア エクスペリエンスで別のページを起動するには、URI をそのページにマップする必要があります。カスタム URI マッパー クラスでこれを行う方法を次の例に示します。


using System;
using System.Windows.Navigation;

namespace CustomMapping
{
    class CustomUriMapper : UriMapperBase
    {
        public override Uri MapUri(Uri uri)
        {
            string tempUri = uri.ToString();
            string mappedUri;

            // Launch from the rich media Open link.
            // Incoming URI example: /MainPage.xaml?Action=RichMediaEdit&token=%7Bed8b7de8-6cf9-454e-afe4-abb60ef75160%7D
            if ((tempUri.Contains("RichMediaEdit")) && (tempUri.Contains("token")))
            {
                // Redirect to RichMediaPage.xaml.
                mappedUri = tempUri.Replace("MainPage", "RichMediaPage");
                return new Uri(mappedUri, UriKind.Relative);
            }

            // Otherwise perform normal launch.
            return uri;
        }
    }
}


この例では、URI マッパーで、受信 URI が RichMediaPage.xaml というページにマップされています (URI 内のページ名が置き換えられています)。そのメソッドで返された URI はアプリのルート フレームによって使用され、アプリの開始時に最初のページを起動します。ルート フレームがカスタム URI マッパーを使用するのは、そのマッパーが、アプリの初期化時に割り当てられるからです。App.xaml.cs ファイルの InitializePhoneApplication メソッドで URI マッパーがどのように割り当てられるかを次のコードに示します。


private void InitializePhoneApplication()
{
    if (phoneApplicationInitialized)
        return;

    // Create the frame but don't set it as RootVisual yet; this allows the splash
    // screen to remain active until the application is ready to render.
    RootFrame = new PhoneApplicationFrame();
    RootFrame.Navigated += CompleteInitializePhoneApplication;

    // Handle navigation failures
    RootFrame.NavigationFailed += RootFrame_NavigationFailed;

    // Assign the custom URI mapper class to the application frame.
    RootFrame.UriMapper = new CustomMapping.CustomUriMapper();

    // Ensure we don't initialize again
    phoneApplicationInitialized = true;
}


ページの起動時、そのページは、ページの NavigationContext オブジェクトの QueryString プロパティを使用して、(ページを起動した) URI のすべてのパラメーターにアクセスできます。MediaLibraryGetPictureFromToken(String) メソッドで token パラメーターの値を使用して、メディア ライブラリから写真を抽出する方法を次の例に示します。このコードは、Photo Extensibility Sample の RichMediaEdit.xaml.cs ファイルの一部です。


protected override void OnNavigatedTo(NavigationEventArgs e)
{
    // Get a dictionary of query string keys and values.
    IDictionary<string, string> queryStrings = this.NavigationContext.QueryString;

    // Ensure that there is at least one key in the query string, and check whether the "token" key is present.
    if (queryStrings.ContainsKey("token"))
    {
        // Retrieve the photo from the media library using the token passed to the app.
        MediaLibrary library = new MediaLibrary();
        Picture photoFromLibrary = library.GetPictureFromToken(queryStrings["token"]);

        // Create a BitmapImage object and add set it as the image control source.
        // To retrieve a full-resolution image, use the GetImage() method instead.
        BitmapImage bitmapFromPhoto = new BitmapImage();
        bitmapFromPhoto.SetSource(photoFromLibrary.GetPreviewImage());
        image1.Source = bitmapFromPhoto;

    }
}


Picture クラスの拡張メソッド PhoneExtensionsGetPreviewImage() を使用する例を次に示します。このメソッドは、電話の画面用に最適化された解像度で大きなサムネイルを返します (WVGA、WXGA、または 720p)。高解像度の画像にアクセスする場合は、PictureGetImage() メソッドを使用します。

この手順では、オープン リンクから Photo Extensibility Sample を起動する方法について説明します。このサンプルはリッチ メディア アプリの例ではありませんが、リッチ メディア アプリ用に機能拡張をワイヤアップする方法が示されています。

サンプルでリッチ メディア機能拡張をテストするには

  1. Photo Extensibility Sample をダウンロードし、Windows Phone SDK で開きます。

  2. メニューから [デバッグ] を選択し、[デバッグ開始] を選択します。

  3. アプリのメイン ページで、[tap to prep for rich media testing] というリンクをタップします。

  4. 写真の保存ページで、[capture and save] ボタンをタップします。

  5. 組み込みのフォト アプリで画面をタップし、ハードウェアのシャッター ボタンを押して、写真を撮影します。Windows Phone 8 Emulator を使用している場合は、F7 キーを押します。

  6. 写真をキャプチャしたら、[accept] を押します。この操作により、組み込みのアプリによって写真がメディア ライブラリに自動保存されます。ただし、この写真はアプリによってライブラリに保存された唯一の写真であり、キャプチャ元を示すラベルも表示されます。Photo Extensibility Sample の写真保存コードは PhotoSave.xaml.cs ファイルに含まれています。サンプル アプリは、組み込みのアプリから返された直後に、写真をメディア ライブラリに保存します。

  7. 写真をキャプチャしたら、[スタート] をタップしてスタート画面に移動します。

  8. スタート画面でフォト アプリをタップし、Photo Extensibility Sample でキャプチャした写真を選択して、フォト ビューアーで表示します。

  9. アプリ バーのページの下部に表示される 3 つのドットをタップします。アプリ バーが展開されたら、オープン リンクをタップします。これにより、表示したばかりの写真へのトークンが含まれる URI が起動します。その URI によって最終的に RichMediaEdit.xaml ページが起動され、先ほど閲覧していた写真が表示されます。

表示:
© 2015 Microsoft