信息
您所需的主题如下所示。但此主题未包含在此库中。

扩展 Windows Phone 7 的照片应用选取器

2014/6/18

仅适用于: Windows Phone OS 7.1

本主题介绍如何让照片编辑应用出现在照片应用选取器中(一个允许用户选取应用以编辑其正在查看的照片的页面)。了解如何使应用能够在无需请用户选择照片的情况下访问照片。有关用于扩展照片体验的其他方法的更多信息,请参见 Windows Phone 8 的照片可扩展性

重要说明重要说明:

在以后的版本中将弃用照片应用选取器。新的 Windows Phone 8 照片编辑应用应改为扩展照片编辑选取器。有关该扩展点的更多信息,请参见扩展 Windows Phone 8 的照片编辑选取器

本主题包括以下部分。

照片应用选取器显示在内置的照片查看器中。通过点击“应用”链接,从应用栏启动该应用。下图显示了照片查看器“应用”链接和照片应用选取器扩展的名称(将随后在本主题中进行描述)。

Extending the photo viewer apps link.

以下步骤描述如何将您的应用集成到照片应用选取器。

Windows Phone OS 7.1 应用需要指定 ID_CAP_MEDIALIB 功能以访问媒体库中的照片。在应用清单文件 WMAppManifest.xml 中指定功能。

<!-- For accessing photos in the media library. -->
<Capability Name="ID_CAP_MEDIALIB" />

要显示在照片应用选取器中,请注册 Photos_Extra_Viewer 扩展。在应用清单文件 WMAppManifest.xml 中指定扩展。在 Tokens 元素的后面,在 Extensions 元素的内部,使用以下 Extension 元素指定照片应用选取器扩展。

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

Windows Phone 清单设计器不支持扩展,请使用 XML(文本)编辑器编辑它们。有关更多信息,请参见如何修改 Windows Phone 8 的应用清单文件

当用户在照片应用选取器中点击您的应用时,将启动深层链接 URI 以打开应用并向用户正在查看的照片发送标记。当 URI 包含以下字符串时,应用可以检测到照片应用选取器启动:token。以下示例是照片应用选取器中的启动 URI(默认导航页面为 MainPage.xaml 时,如 URI 映射器中所示)。

/MainPage.xaml?token=%7B273fea8d-134c-4764-870d-42224d13eb1a%7D

在此示例中,token 参数值为标记。可以使用该字符串从媒体库中检索照片。这随后将在本主题中进行介绍。

由于照片应用选取器以默认的导航页面为目标(在本例中,为 MainPage.xaml),如果您未实现任何 URI 映射,则该页面将启动。如果应用的默认导航页面可以处理由此标记引用的照片,URI 映射不一定是必要的。

然而,如果您想要启动其他页面用于编辑照片,您需要将 URI 映射到该页面。以下示例显示了如何使用自定义的 URI 映射器类完成此操作。


using System;
using System.Windows.Navigation;

namespace CustomMapping
{
    class CustomUriMapper : UriMapperBase
    {
        public override Uri MapUri(Uri uri)
        {
            string tempUri = uri.ToString();
            string mappedUri;

            // Launch from the photo apps picker.
            // Incoming URI example: /MainPage.xaml?token=%7B273fea8d-134c-4764-870d-42224d13eb1a%7D
            if ((tempUri.Contains("token")) && !(tempUri.Contains("RichMediaEdit")))
            {
                // Redirect to PhotoPage.xaml.
                mappedUri = tempUri.Replace("MainPage", "PhotoPage");
                return new Uri(mappedUri, UriKind.Relative);
            }
            // Otherwise perform normal launch.
            return uri;
        }
    }
}


在此示例中,URI 映射器通过替换 URI 中的页面名称,将传入的 URI 映射到名为 PhotoPage.xaml 的页面。随后,由此方法返回的 URI 将由应用的根帧使用,以在应用启动时启动第一页。由于根帧被分配为应用初始化,根帧将使用自定义的 URI 映射器。以下代码显示了在 App.xaml.cs 文件的 InitializePhoneApplication 方法中如何分配 URI 映射器。


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;

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

    // Assign the custom URI mapper class to the application frame.
    RootFrame.UriMapper = new CustomMapping.CustomUriMapper();

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


启动页面时,通过使用页面的 NavigationContext 对象的 QueryString 属性,页面可以访问 URI(启动了该页面)中的所有参数。以下示例显示了如何将 token 参数的值与 MediaLibraryGetPictureFromToken(String) 方法结合使用来从媒体库中提取照片。此代码来自照片可扩展性示例的 PhotoPage.xaml.cs 文件。


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

        // Create a BitmapImage object and add set it as the image control source.
        BitmapImage bitmapFromPhoto = new BitmapImage();
        bitmapFromPhoto.SetSource(photoFromLibrary.GetImage());
        image1.Source = bitmapFromPhoto;
    }
}


此过程介绍如何从 Windows Phone OS 7.1 上的照片应用选取器启动应用。

说明注意:

在调试 Windows Phone OS 7.1 应用时,请记住,重新启动应用将中断第一个应用实例上的调试过程。此外,Emulator 7.1 不支持照片可扩展性测试:该模拟器不包含照片/图片中心。

在手机上测试照片应用选取器

  1. 确认您的手机上有照片或使用 Windows Phone 相机拍摄一张照片。

  2. 将它连接到计算机并等待其被识别。

  3. 按照如何测试在 Windows Phone 中使用照片选择器或相机捕获任务的应用中所述运行 WPConnect.exe 工具。此工具将 Zune 软件从手机上的媒体库断开。WPConnect.exe 允许您在手机连接到计算机时使用照片中心。

  4. 确保应用设置为部署到“设备”,从菜单中选择“调试”,然后选择“开始调试”

  5. 应用出现后,点击“启动”导航到“开始”屏幕。

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

  7. 点击位于应用栏上页面底部的三个圆点。应该显示一个菜单,在该菜单列表的底部带有一个“应用”链接。选择“应用”

  8. “应用”页面上,点击您的应用的名称。这将启动一个 URI,它包含您刚刚查看的照片的标记。

显示: