Pictures Hubから任意の写真をパラメータとして渡して共有する(Windows Phone OS 7.0)

By | 2013/04/24
Pocket

Picture Hubで任意の写真1枚をFacebookやWindows Liveなどで共有したい場合など、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からの「share…」(OS 7.1以降の「共有…」に相当)を行うのは、特殊な名前のxmlファイルを追加するだけで対応が可能です。

ソリューションエクスプローラーから該当のプロジェクトを作成し、[追加]->[新しい項目]を選択します。

いくつか種類ごとに並んでいますので、XMLファイルを選択して「E0F0E49A-3EB1-4970-B780-45DA41EC7C28.xml 」というファイルを追加します。中身は空で大丈夫です。

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

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

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

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

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

MainPageページへの遷移後にOnNavigatedToメソッドが呼び出されるので、「FileId」というキーが存在確認を行い、キーが存在していれば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で選択した場合「FileId」というキーが付与されます。
            // FileIdが存在しなければ処理を行いません。
            if (queryStrings.ContainsKey("FileId")) {
 
                // XNAFramworkを使用してトークンから写真を取得
                MediaLibrary library = new MediaLibrary();
                Picture picture = library.GetPictureFromToken(queryStrings["FileId"]);
                
                // BitmapImageオブジェクトを作成
                BitmapImage bitmap = new BitmapImage();
                bitmap.CreateOptions = BitmapCreateOptions.None;
                bitmap.SetSource(picture.GetImage());

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

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

参照