Pictures Hubから任意の写真をパラメータとして渡してアプリケーションを起動する(Windows Phone OS 7.0)

By | 2013/04/24
Pocket

Picture Hubで任意の写真1枚にエフェクトを掛けたい場合など、Picture Hubから写真の情報をパラメータとして渡し、特定のWindows Phone OS 7.0向けアプリケーションを起動することが出来ます。

現在のところ、Windows Phone OS 7.0とOS7.1とでは手順が異なりますので、どちらのSDKを使うかによって使い分けて頂ければと思います。Windows Phone OS 7.1向けアプリケーションの場合はこちらをご覧ください。

Windows Phone OS 7.0向けにPictures Hubからの「extras…」(OS 7.1以降の「アプリ…」に相当)に対応するのは、「Extras.xml」という特殊な名前のスクリプトファイルを追加する必要があります。

ソリューションエクスプローラーから該当のプロジェクトを作成し、[追加]->[新しい項目]を選択します。インストールされたテンプレートから「XML ファイル」を選択します。ファイル名は必ず「Extras.xml」としてください。

「share…」の場合と異なり、Extras.xmlは中身が空では正しく動作しません。エディタ等にてExtras.xmlを開いて頂きまして、以下のxmlをコピーしてください(xmlの中身は下記通りである必要があります)。

<?xml version="1.0" encoding="utf-8" ?>
<Extras>
  <PhotosExtrasApplication>
    <Enabled>true</Enabled>
  </PhotosExtrasApplication>
</Extras>

端末へこのアプリケーションをデプロイした状態で、Pictures Hubで任意の写真を見ている時にアプリケーションメニューの「extras…」をタップすると、自アプリケーションが追加されていることが確認できます。

以上で簡単ですが準備が整いました。

## 自アプリケーション側でパラメータを受け取る

Pictures Hubの「extras…」からアプリケーションを選択した場合、クエリ文字列に「token」というトークンが付与されます。このトークンから写真情報を取得することが可能です。

// トークンを取り出す
var token = NavigationContext.QueryString["token"];

// トークンから写真情報を取得
MediaLibrary library = new MediaLibrary();
Picture picture = library.GetPictureFromToken(token);

MainPageページへの遷移後にOnNavigatedToメソッドが呼び出されるので、「token」というキーが存在確認を行い、キーが存在していればMediaLibrary.GetPictureFromTokenメソッドを使用しPictureオブジェクトを取り出だして、Imageコントロールへ設定します。

using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using Microsoft.Phone.Controls;
using Microsoft.Xna.Framework.Media;

namespace PicturesHubWP70Test2 {
    public partial class MainPage : PhoneApplicationPage {
        public MainPage() {
            InitializeComponent();
        }

        protected override void OnNavigatedTo(NavigationEventArgs e) {
            // クエリ文字列を取得
            var queryStrings = NavigationContext.QueryString;

            // Pictures Hubで選択した場合「token」というキーが付与されます。
            // tokenが存在しなければ処理を行いません。
            if (queryStrings.ContainsKey("token")) {
 
                // XNAFramworkを使用してトークンから写真を取得
                MediaLibrary library = new MediaLibrary();
                Picture picture = library.GetPictureFromToken(queryStrings["token"]);
                
                // BitmapImageオブジェクトを作成
                BitmapImage bitmap = new BitmapImage();
                bitmap.CreateOptions = BitmapCreateOptions.None;
                bitmap.SetSource(picture.GetImage());

                // Imageコントロールに画像をBitmapImageオブジェクトを設定
                image.Source = bitmap;
            }
        }
    }
}

ソリューションエクスプローラーから[参照の追加]を選択して、「Microsoft.Xna.Framework」を追加しておくのを忘れないでください。

## 参照

なし