此主题尚未评级 - 评价此主题

Windows Phone 8 的富媒体可扩展性

2013/12/5

适用于:仅限于 Windows Phone 8。

富媒体应用将来自本地文件夹和网络的数据相合并,以在用户查看或编辑他们捕获的图像时提供独特的体验。本主题描述了应用如何集成富媒体可扩展性并扩展内置的照片查看器体验。尽管镜头应用能够使用富媒体可扩展性,但是使用镜头可扩展性并不需要使用富媒体应用。有关镜头的更多信息,请参见 Windows Phone 8 的镜头

说明注意:

本主题所述的许多代码都展示在照片可扩展性示例中。

要帮助确保您的应用能够通过 Windows Phone 商店 的认证,请检查富媒体应用认证要求。有关更多信息,请参见 Additional requirements for specific app types for Windows Phone

本主题包含以下各节。

富媒体应用将存储在媒体库中的照片链接到存储在地文件夹中的数据,从而创造独特的应用内体验。例如,社交媒体应用可能将它已捕获和保存到媒体库中的照片与它从 Web 服务检索的数据进行了结合,以创造一种体验,来允许用户查看其朋友发布的有关该照片的评论。幻灯片应用可能允许用户查看包含当前照片的幻灯片。

尽管您被限制为在媒体库中仅可存储 JPG 文件,您可以将有关该照片的其他信息存储到应用的本地文件夹中。要链接该信息,您可以使用由 Picture 类的 GetPath 扩展方法返回的照片的路径识别该照片。要使用 GetPath,请向 Microsoft.Xna.Framework.Media.PhoneExtensions 添加一个指令。

不要将富媒体“打开”链接用于传统的照片编辑,因为它被限制为只允许对本机拍照中的 JPG 文件执行位操作。富媒体可扩展性是为使用照片的附加信息执行“富编辑”的应用而设计的。例如,当其他照片被存储在应用的本地文件夹中时,允许用户从“时间移位”捕获中选择不同的照片,这被视作为富编辑。仅可在用户在应用内通过查看照片增加其照片体验时使用“打开”链接。对于传统照片编辑,例如位操作、剪切、增亮、旋转等,可使用“编辑”“应用”链接。“编辑”链接用于 Windows Phone 8 照片编辑应用,而“应用”链接用于 Windows Phone OS 7.1 照片编辑应用。

说明注意:

仅富媒体应用保存在媒体库中的 JPG 文件才显示“打开”链接。所有保存在媒体库中的 JPG 文件都显示会编辑应用链接。

当富媒体应用将照片保存到媒体库中时,操作系统会“记住”捕获它的应用。这样一来,当您使用照片查看器查看照片时,照片查看器将随照片显示“拍摄者”副标题。在应用栏中,照片查看器显示专用于启动应用的特殊“打开”链接。下图演示了“打开”链接和“拍摄者”标题。

Extending the photo viewer open link.

下列步骤描述如何将富媒体应用集成到照片体验中。

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

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

若要声明您的应用是富媒体应用,则注册 Photos_Rich_Media_Edit 扩展。在 WMAppManifest.xml 文件中指定扩展。紧接在 Tokens 元素后面,在 Extensions 元素内,使用以下 Extension 元素指定富媒体扩展。

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

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

当用户使用“打开”链接点击应用时,将启动深层链接 URI 以打开应用并向用户正在查看的照片发送标记。应用能够在 URI 包含以下字符串时检测到富媒体启动:RichMediaEdittoken。以下示例为用于富媒体应用的启动 URI(如同在默认导航页面为 MainPage.xaml 时从 URI 映射器看到的)。

/MainPage.xaml?Action=RichMediaEdit&token=%7Bed8b7de8-6cf9-454e-afe4-abb60ef75160%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 rich media Open link.
            // Incoming URI example: /MainPage.xaml?Action=RichMediaEdit&token=%7Bed8b7de8-6cf9-454e-afe4-abb60ef75160%7D
            if ((tempUri.Contains("RichMediaEdit")) && (tempUri.Contains("token")))
            {
                // Redirect to RichMediaPage.xaml.
                mappedUri = tempUri.Replace("MainPage", "RichMediaPage");
                return new Uri(mappedUri, UriKind.Relative);
            }

            // Otherwise perform normal launch.
            return uri;
        }
    }
}


在该实例中,URI 映射器通过替换 URI 内的页面名称,将传入 URI 映射到名为 RichMediaPage.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(启动该页面的 URI)中的所有参数。以下示例演示如何使用 token 参数值和 MediaLibraryGetPictureFromToken(String) 方法解压缩来自媒体库的照片。此代码来自“照片可扩展性示例”的 RichMediaEdit.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.
        // To retrieve a full-resolution image, use the GetImage() method instead.
        BitmapImage bitmapFromPhoto = new BitmapImage();
        bitmapFromPhoto.SetSource(photoFromLibrary.GetPreviewImage());
        image1.Source = bitmapFromPhoto;

    }
}


此示例使用图片类的扩展方法 PhoneExtensionsGetPreviewImage()。此方法返回较大缩略图,其分辨率经过优化以填充手机屏幕(WVGA、WXGA 或 720p)。如果您想要访问高分辨率图像,请使用 PictureGetImage() 方法。

此过程描述如何从“打开”链接启动“照片可扩展性示例”。此示例并非演示富媒体的示例,但它演示了如何为富媒体连接可扩展性。

使用示例测试富媒体可扩展性的步骤

  1. 下载照片可扩展性示例并在 Windows Phone SDK 中打开它。

  2. 从菜单中选择“调试”,然后选择“开始调试”

  3. 在应用的主页面上,点按该链接:点按以准备富媒体测试

  4. 在照片保存页面单击“拍摄并保存”按钮。

  5. 从内置的照片应用,通过点击屏幕、按硬件快门按钮或按 F7(如果您使用的是 Windows Phone 8 模拟器)拍摄照片。

  6. 在拍摄照片后按“接受”。执行此操作时,内置应用会自动将照片保存到媒体库。然而,只有应用保存到库中的照片才会显示有“拍摄者”标签。在照片可扩展性示例中,照片保存代码在文件 PhotoSave.xaml.cs 中。示例应用在内置应用返回时立即将照片保存到媒体库。

  7. 在拍摄照片之后,点击“启动”导航到“开始”屏幕。

  8. 在“开始”屏幕上,单击“照片”应用,然后选择由照片可扩展性示例拍摄的照片并在照片查看器中查看它。

  9. 点击位于应用栏上页面底部的三个圆点。待应用栏扩展后,点击“打开”链接。这会启动包含您刚才查看的照片的标记的 URI。此 URI 将最终启动 RichMediaEdit.xaml 页面并显示您刚才查看的照片。

本文是否对您有所帮助?
(1500 个剩余字符)
感谢您的反馈
显示:
© 2014 Microsoft. 版权所有。