导出 (0) 打印
全部展开
信息
您所需的主题如下所示。但此主题未包含在此库中。

快速入门:接收共享内容 (XAML)

Applies to Windows and Windows Phone

此快速入门将带你完成从另一个应用接收共享内容所需的步骤。

目标: 了解如何接收共享内容

先决条件

  • 你应当熟悉 Visual Studio 及其模板。
  • 你应当熟悉使用 C#/C++ 进行开发。

说明

支持“共享”合约

你必须首先声明你的应用支持“共享”合约,然后你的应用才能接收共享内容。此合约让系统知道你的应用可用于接收内容。如果你使用 Visual Studio 模板创建应用,以下是支持“共享”合约的方法:

  1. 打开清单文件。该文件的名称类似 package.appxmanifest
  2. 打开“声明”选项卡。
  3. 从“可用声明”列表中,选择“共享目标”,并单击“添加”

指定支持的文件类型和数据格式

作为目标应用开发人员,你需要决定要支持哪些文件类型和数据格式。若要指定你支持的文件类型,请执行以下操作:

  1. 打开清单文件。该文件的名称类似 package.appxmanifest
  2. 在“声明”页的“支持的文件类型”部分,单击“新增”
  3. 键入要支持的文件扩展名。例如,.docx。你需要包括句点 (.)。

如果希望支持所有文件类型,请选中“支持所有文件类型”框。

若要指定你支持的数据格式,请执行以下操作:

  1. 打开清单文件。
  2. 在“声明”页的“数据格式”部分,单击“新增”。
  3. 键入支持的数据格式的名称。例如,“文本”。

共享 API 支持多种标准格式,如文本、HTML 和位图。你还可以指定自定义文件类型和数据格式。指定时,请记住源应用必须明确这些类型和格式,否则它们无法使用这些格式来共享数据。

添加 DataTransfer 命名空间

你需要向你的应用中添加合适的命名空间,以处理共享激活事件,并创建和处理与共享相关的对象。对于目标应用,你需要 Windows.ApplicationModel.ActivationWindows.ApplicationModel.DataTransferWindows.ApplicationModel.DataTransfer.ShareTarget 命名空间:


using Windows.ApplicationModel.Activation;
using Windows.ApplicationModel.DataTransfer;
using Windows.ApplicationModel.DataTransfer.ShareTarget;


处理共享激活

当用户选择你的应用时(通常从共享 UI 中可用目标应用的列表中进行选择),将触发 Application.OnShareTargetActivated 事件。你的应用需要处理此事件来处理用户要共享的数据。


protected override async void OnShareTargetActivated(ShareTargetActivatedEventArgs args)
{
    // Code to handle activation goes here.	
}

注意  

如果你的应用在激活为“共享”目标时正在运行,应用的现有实例将终止,并将启动应用的新实例以处理该合约。


void App::OnShareTargetActivated(ShareTargetActivatedEventArgs^ args)
{
    // Code to handle activation goes here.	
}

用户要共享的数据包含在一个 ShareOperation 对象中。你可以使用该对象来检查所包含数据的格式。以下是处理纯文本格式的共享内容的事件处理程序的一个示例:


ShareOperation shareOperation = args.ShareOperation;
if (shareOperation.Data.Contains(StandardDataFormats.Text))
{
    string text = await shareOperation.Data.GetTextAsync();

    // To output the text from this example, you need a TextBlock control
    // with a name of "sharedContent".
    sharedContent.Text = "Text: " + text;
}


报告扩展共享状态(针对耗时操作)

  • Applies to Windows Phone

注意  

以下步骤仅适用于 Windows 应用商店应用。你可以在下面调用来自 Windows Phone 8.1 的报告方法,但不会返回任何数据。

在某些情况下,你的应用可能需要花费一定时间来处理要共享的数据。我们将这些情形称为扩展共享。扩展共享的示例包括用户共享文件或图像的集合。这些项目比简单的文本字符串大,因此处理时间较长。

注意  如果你只希望共享简单的文本或超链接,则可以跳过本部分。

作为目标应用,你的应用不应只是因为应用需要更多时间来处理数据,就迫使用户留在共享 UI 中。你应当使用 ShareOperation 对象让系统获知你的应用仍在工作。那样,用户可以关闭共享 UI 并返回到他们正在进行的事项。同时,你的应用继续在后台处理数据。


shareOperation.ReportStarted();


在调用 ReportStarted 之后,将不再有任何与你的应用所进行的用户交互。因此,你不应该调用它,除非你的应用处于可以由用户关闭的位置。

使用扩展共享时,用户有可能会在你的应用获得来自 DataPackage 对象的所有数据之前关闭源应用。因此,我们建议你让系统知道你的应用何时已获得它所需的数据。这样,系统可以根据需要挂起或终止源应用。


shareOperation.ReportDataRetreived();

最好能让系统获知你是否在使用某种 Windows.Networking.BackgroundTransfer classes 上载内容。你可以使用 ReportSubmittedBackgroundTask 方法执行此操作。


shareOperation.ReportSubmittedBackgroundTask();

如果发生错误,你还可以调用 ReportError 向系统发送一条错误消息。用户在检查共享的状态时将看到该消息。此时,你的应用将关闭并且结束共享—用户将需要再次启动才能将内容共享给你的应用。根据你的方案,你可能确定某个特殊错误并不严重,不足以结束共享操作。在这种情况下,你可以选择不调用 ReportError 并且继续此共享。


shareOperation.ReportError("Could not reach the server! Try again later.");

通常在使用这些方法时,请确保按照所述的顺序来进行调用,不要多次调用它们。然而在某些时候,目标应用可能会在调用 ReportStarted之前调用 ReportDataRetrieved。例如,应用可能在激活处理程序中执行任务时检索数据,但不调用 ReportStarted,直到用户单击“共享”按钮之后才调用。

若要了解共享的实际应用,请查看我们的共享内容目标应用示例

报告共享已完成

最后,当你的应用成功处理好共享内容之后,你应当调用 ReportCompleted 来通知系统。


shareOperation.ReportCompleted();

在你的应用知道共享完成之后,你的应用会被关闭。

如果共享成功,则返回 QuickLink 对象

  • Applies to Windows Phone

注意  

QuickLink 在 Windows Phone 8.1 中不受支持。Windows Phone 应用商店应用可以将 QuickLink 接收为共享操作的一部分,但这些 QuickLink 会被自动忽略。

当用户选择你的应用来接收共享内容时,我们强烈建议你创建一个 QuickLinkQuickLink 类似于快捷方式,可让用户更轻松地使用你的应用共享信息。例如,你的应用可以创建一个 QuickLink,用来打开预配置了好友电子邮件地址的新邮件。

QuickLink 必须包含标题、图标和 ID。当用户点击“共享”超级按钮时,会显示标题(类似 Email Mom)和图标。你的应用使用 ID 来访问任何自定义信息,如电子邮件地址或登录凭据。当你的应用创建 QuickLink 时,该应用会通过调用 ShareOperation 对象的 ReportCompleted 方法,将 QuickLink 返回到系统。下面是一个示例:


async void ReportCompleted(ShareOperation shareOperation, string quickLinkId, string quickLinkTitle)
{
    QuickLink quickLinkInfo = new QuickLink
    {
        Id = quickLinkId,
        Title = quickLinkTitle,

        // For quicklinks, the supported FileTypes and DataFormats are set 
        // independently from the manifest
        SupportedFileTypes = { "*" },
        SupportedDataFormats = { StandardDataFormats.Text, StandardDataFormats.Uri, 
                StandardDataFormats.Bitmap, StandardDataFormats.StorageItems }
    };

    StorageFile iconFile = await Windows.ApplicationModel.Package.Current.InstalledLocation.CreateFileAsync(
            "assets\\user.png", CreationCollisionOption.OpenIfExists);
    quickLinkInfo.Thumbnail = RandomAccessStreamReference.CreateFromFile(iconFile);
    shareOperation.ReportCompleted(quickLinkInfo);
}


请记住,你的应用负责存储 QuickLink 的 ID 及相应的用户数据。当用户点击 QuickLink 时,你可以通过 ShareOperation 对象的 QuickLinkId 属性获取其 ID。

摘要和后续步骤

现在,对于如何接收共享的内容,以及如何创建 QuickLink 来帮助用户使用你的应用共享内容,你应该有了一个清晰的了解。

要了解更多,或获取有关如何向应用添加共享的更具体示例,则需要查阅:

注意  调试共享目标应用与调试其他种类的应用不同。要了解详细信息,请参阅调试目标应用指南

相关主题

选择用于共享的数据格式
内容共享指南和清单
快速入门:共享内容

 

 

显示:
© 2014 Microsoft