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

By | 2013/04/24
Pocket

Picture Hubで任意の写真1枚をFacebookやWindows Liveなどで共有したい場合など、Picture Hubから写真の情報をパラメータとして渡し、特定のWindows Phone OS 7.1向けアプリケーションを起動することが出来ます。

現在のところ、Windows Phone OS 7.0とOS7.1とでは手順が異なりますので、どちらのSDKを使うかによって使い分けて頂ければと思います。Windows Phone OS 7.0向けアプリケーションの場合は、[こちら](http://ch3cooh.jp/index.php/tips/windowsphone7/hub-integrate/pictures-hub/start-share-application-for-wp70/)をご覧ください。

## 任意の写真をパラメータとして渡して共有する

WMAppManifest.xmlを編集します。ソリューションエクスプローラー開いて頂き、Propertiesフォルダを開きます。

一番下にあるWMAppManifest.xmlを開きます。以下のようにApp要素の子要素として、以下のExtensions要素を追加します。ExtensionNameやConsumerIDの値は変更しないでください。

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

どこに追加して良いのか判らない方がいるかもしれませんのでWMAppManifest.xmlを全文表示します。

<?xml version="1.0" encoding="utf-8"?>

<Deployment xmlns="http://schemas.microsoft.com/windowsphone/2009/deployment" AppPlatformVersion="7.1">
  <App xmlns="" ProductID="{25000fe8-f99e-454a-a115-a48a0eb15606}" 
       Title="PictureHubWP71Test" RuntimeType="Silverlight" 
       Version="1.0.0.0" Genre="apps.normal"  
       Author="author" Description="" Publisher="PictureHubWP71Test">
    <IconPath IsRelative="true" IsResource="false">ApplicationIcon.png</IconPath>
    <Capabilities>
      <Capability Name="ID_CAP_GAMERSERVICES"/>
      <Capability Name="ID_CAP_IDENTITY_DEVICE"/>
      <Capability Name="ID_CAP_IDENTITY_USER"/>
      <Capability Name="ID_CAP_LOCATION"/>
      <Capability Name="ID_CAP_MEDIALIB"/>
      <Capability Name="ID_CAP_MICROPHONE"/>
      <Capability Name="ID_CAP_NETWORKING"/>
      <Capability Name="ID_CAP_PHONEDIALER"/>
      <Capability Name="ID_CAP_PUSH_NOTIFICATION"/>
      <Capability Name="ID_CAP_SENSORS"/>
      <Capability Name="ID_CAP_WEBBROWSERCOMPONENT"/>
      <Capability Name="ID_CAP_ISV_CAMERA"/>
      <Capability Name="ID_CAP_CONTACTS"/>
      <Capability Name="ID_CAP_APPOINTMENTS"/>
    </Capabilities>
    <Tasks>
      <DefaultTask  Name ="_default" NavigationPage="MainPage.xaml"/>
    </Tasks>
    <Tokens>
      <PrimaryToken TokenID="PictureHubWP71TestToken" TaskName="_default">
        <TemplateType5>
          <BackgroundImageURI IsRelative="true" IsResource="false">Background.png</BackgroundImageURI>
          <Count>0</Count>
          <Title>PictureHubWP71Test</Title>
        </TemplateType5>
      </PrimaryToken>
    </Tokens>
    <Extensions>
      <Extension ExtensionName="Photos_Extra_Share" ConsumerID="{5B04B775-356B-4AA0-AAF8-6491FFEA5632}" TaskID="_default" />
    </Extensions>
  </App>
</Deployment>

端末へのデプロイ後にPictures Hubで任意の写真を選択し、「共有…」を選択しました。

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

起動パラメータにtokenが付与されています。開かれたページで「FileID」のパラメータをMediaLibraryクラスのGetPictureFromTokenメソッドの引数とすることで、画像のストリームが取得出来ます。

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 "FileId" key is present.
    if (queryStrings.ContainsKey("FileID"))
    {
        // Retrieve the picture from the media library using the FileID
        // passed to the application.
        MediaLibrary library = new MediaLibrary();
        Picture picture = library.GetPictureFromToken(queryStrings["FileID"]);

        // Create a WriteableBitmap object and add it to the Image control Source property.
        BitmapImage bitmap = new BitmapImage();
        bitmap.CreateOptions = BitmapCreateOptions.None;
        bitmap.SetSource(picture.GetImage());

        WriteableBitmap picLibraryImage = new WriteableBitmap(bitmap);
        retrievePic.Source = picLibraryImage;
    }
}

## 参照

* [How to: Extend the Share Picker with App Connect for Windows Phone](http://msdn.microsoft.com/en-us/library/ff967563%28v=VS.92%29.aspx)