情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

Windows Phone 8 のレンズ機能拡張

2014/06/18

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

Windows Phone 8 では、レンズというカメラ アプリを作成できます。レンズは組み込みのカメラ アプリから起動され、すぐにビューファインダー機能を開き、ユーザーが瞬間をキャプチャできるようにします。レンズ拡張機能がレンズ選択に表示されるためには、すべてのレンズを登録する必要があります。レンズ選択からアプリを起動した時点でビューファインダー エクスペリエンスが得られるようにするのは、アプリの責任範囲です。また、レンズ選択専用の新しいアイコンも作成する必要があります。このトピックでは、アプリにレンズ機能拡張を組み込む方法について説明します。レンズ アプリの設計についての情報は、「Windows Phone のレンズ デザイン ガイドライン」を参照してください。

レンズ選択には、アプリ アイコンとは解像度の異なるアイコンが必要です。電話の 3 つの解像度に対応する 3 つのアイコンを、アプリの Assets フォルダーに準備する必要があります。これらのアイコンの詳細については、「Windows Phone のレンズ デザイン ガイドライン」を参照してください。

レンズ エクスペリエンスを統合するため、Camera_Capture_App 拡張機能に登録します。この拡張機能は、オペレーティング システムに対し、アプリがレンズ選択から起動されたときにビューファインダーを表示可能であることを宣言します。また、この拡張機能は Windows Phone ストア でも、レンズを識別してレンズ選択に表示するために使用されます。拡張機能は WMAppManifest.xml ファイルで指定します。Tokens 要素の直後の、Extensions 要素の中で、次の Extension 要素を使用してレンズ拡張機能を指定します。

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

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

レンズ選択から起動した場合には、アプリは必ずビューファインダー機能から開くようにする必要があります。ユーザーがレンズ選択でアプリをタップすると、ディープ リンク URI によってユーザーがアプリに接続されます。URI によって既定のページ (例: MainPage.xaml) を開くこともできますし、URI マッパーを使用して別のページを開くこともできます。このステップでは、両方のケースについて説明します。

アプリを既定のページで起動する

アプリが 1 ページのみで、そのページにビューファインダーを表示する場合は、URI マッピングは不要です。アプリ マニフェスト ファイルの DefaultTask 要素で指定されているページで、アプリが起動されます。新しい Windows Phone アプリを作成する場合、既定で MainPage.xaml は起動ページに設定される点に注意してください。

アプリを別のページで起動する

既定の起動ページではビューファインダーを提供しない場合は、URI マッピングを使用して、アプリ内でビューファインダーのあるページにユーザーを接続します。

レンズ選択からの起動をアプリ内の特定のページにマッピングするには、(System.Windows.Navigation 名前空間内の) UriMapperBase クラスに基づいて、独自の URI マッパー クラスを作成することを推奨します。この URI マッパー クラスで、MapUri(Uri) メソッドをオーバーライドして、着信 URI をアプリケーション内のページにマッピングします。

たとえば、次のコードは文字列 ViewfinderLaunch を含む URI を検出します。URI マッパーがこの文字列を検出すると、viewfinderExperience.xaml という名前のビューファインダーを表示するページにユーザーを接続します。この文字列が見つからない場合は、着信 URI を元の状態で返します。


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Navigation;

namespace LensExample
{
    class LensExampleUriMapper : UriMapperBase
    {
        private string tempUri;

        public override Uri MapUri(Uri uri)
        {
            tempUri = uri.ToString();

            // Look for a URI from the lens picker.
            if (tempUri.Contains("ViewfinderLaunch"))
            {
                // Launch as a lens, launch viewfinder screen.
                return new Uri("/viewfinderExperience.xaml", UriKind.Relative);
            }

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


アプリの URI マッパー クラスを作成したら、それを App.xaml.cs ファイル内のアプリのフレームに割り当てます。次に例を示します。


// Assign the lens example URI-mapper class to the application frame.
RootFrame.UriMapper = new LensExampleUriMapper();


このコードは、アプリ フレームの UriMapper プロパティに LensExampleUriMapper クラスを割り当てます。InitializePhoneApplication メソッドの既存のコードは変更しないでください。以下の例に示すように、UriMapper の割り当ての追加のみを行います。


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;

    // Assign the lens example URI-mapper class to the application frame.
    RootFrame.UriMapper = new LensExampleUriMapper();

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

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


レンズ選択からアプリが起動されると、アプリは初期化中に URI マッパーを割り当てます。アプリはページを表示する前に、URI マッパーの MapUri メソッドを呼び出し、起動すべきページを判別します。URI マッパーが返す URI は、アプリが起動するページです。

表示: