如何使用 Windows Phone 的应用程序连接扩展共享选取器

2012/2/9

使用“应用程序连接”,可以从图片查看器的“共享”链接启动您的应用程序,并为用户提供将图片共享到 Web 服务的丰富体验。本主题介绍如何创建可以从图片查看器“共享”页面启动的应用程序以及如何从深层链接 URI 中提取相应的图片 FileId 参数。有关扩展图片体验的更多信息,请参阅 Windows Phone 的图片可扩展性概述

本主题不包含用于与 Web 服务通信的代码。您必须提供将图片上传到 Web 服务所需的代码。有关将 Web 服务与您的应用程序结合使用的更多信息,请参阅 Windows Phone 联网和 Web 服务概述

提示提示:

在 Windows Phone OS 7.1 中,已对图片可扩展性进行了更改。有关如何扩展在 Windows Phone OS 7.0 上运行的应用程序中的图片体验的信息,请参阅此处的 Windows Phone OS 7.0 开发人员文档。

在 Windows Phone SDK 7.1 中,不需要 E0F0E49A-3EB1-4970-B780-45DA41EC7C28.xml 文件。当将扩展共享选取器的应用程序升级到 Windows Phone OS 7.1 时,删除此文件并使用本主题中所述的新扩展性技术。

对于这个版本的 Windows Phone SDK,本主题只能在设备上完成,而不能在 Windows Phone 模拟器上完成。当前版本的模拟器不包括对设备上图片中心的访问。

本主题基于 C# 开发;但也提供 Visual Basic 代码。

在本节中,您将创建应用程序,声明共享选取器的扩展以及添加图像控件以显示与应用程序的启动相对应的图像。

声明共享选取器扩展性应用程序的步骤

  1. 在 Visual Studio 2010 Express for Windows Phone 中,通过选择“文件 | 新建项目”菜单命令创建一个新项目。

  2. 将显示“新建项目”窗口。展开“Visual C#”模板,然后选择“Silverlight for Windows Phone”模板。

  3. 选择“Windows Phone 应用程序”模板。用您选择的名称填写“名称”框。默认情况下,这是将出现在共享选取器“共享”页面上的名称。

  4. 单击“确定”。将显示“新建 Windows Phone 应用程序”窗口。

  5. “目标 Windows Phone 版本”菜单中,确保已选择 Windows Phone 7.1。

  6. 单击“确定”。将创建一个新的项目,并且“MainPage.xaml”将在 Visual Studio 设计器窗口中打开。

  7. “项目”菜单中,选择“添加引用”。在 .NET 选项卡中,选择 Microsoft.Xna.Framework 并单击“确定”

  8. 打开应用程序清单文件 WMAppManifest.xml 并紧接着 Tokens 元素下面添加以下代码作为 App 元素的子元素。该代码声明您的应用程序支持扩展共享选取器。

    <Extensions>
          <Extension ExtensionName="Photos_Extra_Share" ConsumerID="{5B04B775-356B-4AA0-AAF8-6491FFEA5632}" TaskID="_default" />
    </Extensions>
    
    
  9. 打开主页的代码隐藏文件 MainPage.xaml.cs,在该页面的顶部添加以下指令。

    using System.Windows.Media.Imaging;
    using Microsoft.Phone;
    using System.IO;
    using Microsoft.Xna.Framework.Media;
    using System.Windows.Navigation;
    
    
  10. MainPage.xaml 中,将名为 LayoutRootGrid 替换为以下代码。

        <!--LayoutRoot is the root grid where all page content is placed.-->
        <Grid x:Name="LayoutRoot" Background="Transparent">
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto"/>
                <RowDefinition Height="*"/>
            </Grid.RowDefinitions>
    
            <!--TitlePanel contains the name of the application and page title.-->
            <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
                <TextBlock 
                    x:Name="ApplicationTitle" Text="APP CONNECT EXAMPLE" 
                    Style="{StaticResource PhoneTextNormalStyle}"/>
                <TextBlock 
                    x:Name="PageTitle" Text="shared picture" Margin="9,-7,0,0" 
                    Style="{StaticResource PhoneTextTitle1Style}"/>
            </StackPanel>
    
            <!--ContentPanel - place additional content here-->
            <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
                <Image 
                    Height="350" 
                    HorizontalAlignment="Left" 
                    Margin="15,15,0,0" 
                    Name="retrievePic" 
                    Stretch="Fill" 
                    VerticalAlignment="Top" 
                    Width="450" />
            </Grid>
        </Grid>
    
    

在本节中,您为与应用程序启动相对应的图片提取 FileId 参数。使用该参数值时,该图片显示在图像控件中。在实际的应用程序中,该参数用于检索图像并将图像发送到 Web 服务。

提取 FileId 参数的步骤

  • MainPage.xaml.cs 中,向 MainPage 类中添加以下代码。该代码实现 OnNavigatedTo(NavigationEventArgs) 方法,在启动应用程序的 URI 中查找 FileId 参数。如果 FileId 参数存在,则应用程序从媒体库中检索相应的图片,使用该图片创建位图图像并在名为 retrievePicImage 控件中显示该图像。

    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;
        }
    }
    
    
注意注意:

当您的应用程序启动时,由您来负责验证它是从共享选取器启动的还是从应用程序列表启动的。如果是从共享选取器启动的,则应该会显示您的共享 UI,您应该使用上面所述的方法来访问此照片。如果不是从共享选取器启动的(可以通过检查是否包含 queryStrings["Action"] = "ShareContent" 来验证),则应该使用标准的照片选择器来检索图像。有关更多信息,请参阅Windows Phone 选择器

当设备连接到计算机时,不能使用图片中心,也不能从图片查看器启动您的应用程序。但是,设备必须连接到计算机才能加载您的应用程序。该过程介绍如何将您的应用程序传输到设备并对其进行测试。

在设备上测试应用程序连接的步骤

  1. 借助您的 Windows Phone,使用相机拍摄一张照片。

  2. 将手机连接到计算机并等待 Zune 软件识别。确保应用程序设置为部署到“Windows Phone 设备”,从菜单中选择“调试”,然后选择“开始调试”。看到应用程序之后,回到“调试”菜单并选择“停止调试”。断开设备与计算机的连接并导航到“开始”屏幕。

  3. “开始”屏幕上,点按“图片”应用程序,然后点按“全部”。点按“本机拍照”部分以查找您的图片,然后点按该图片缩略图来扩展该图片。

  4. 点按位于应用程序栏上页面底部的三个圆点。应该显示一个菜单,在该菜单列表的底部带有一个“共享...”选项。选择“共享...”

  5. “共享”页面上,选择您应用程序的名称。您的应用程序应当会打开,并显示在 Image 控件中。

下图从左到右显示了如何从共享选取器启动名为 Your Share Picker App 的应用程序。

OEM_OemMoAppDevGuide_SharePicker

显示: