“我的人脉”共享

重要

我的人员在应用了 KB5034203 的 Windows 11 和 Windows 10 版本中不再受支持。

利用“我的人脉”功能,用户可以将联系人固定到其任务栏,这样,他们可以从 Windows 中的任何地方轻松地保持联系,而与他们进行联系所使用的应用程序无关。 现在,通过将文件从文件资源管理器拖到“我的人脉”固定区域,用户可以与他们固定的联系人分享内容。 他们还可以通过标准共享超级按钮与 Windows 联系人存储中的任何联系人共享。 请继续阅读,了解如何将应用程序启用为“我的人脉”共享目标。

My people sharing panel

要求

概述

你必须执行以下三个步骤,才能将应用程序启用为“我的人脉”共享目标:

  1. 声明对应用程序清单中的 shareTarget 激活合约提供支持。
  2. 为用户可与之共用应用的联系人添加注释。
  3. 支持同时运行应用程序的多个实例。 用户必须能够与完整版本的应用程序进行交互,并且同时也可以使用应用程序与其他人共享。 他们可以同时在多个共享窗口中使用该应用程序。 为了对此提供支持,应用程序需要能够同时运行多个视图。 若要了解如何执行此操作,请参阅文章“显示应用的多个视图”

当你完成此操作后,应用程序将在“我的人脉”共享窗口中显示为共享目标,可以通过以下两种方式启动共享目标:

  1. 通过共享超级按钮选择联系人。
  2. 将文件拖放到固定到任务栏上的联系人。

声明对“共享”合约提供支持

若要声明支持以应用程序作为共享目标,请首先在 Visual Studio 中打开应用程序。 从解决方案资源管理器中,右键单击 package.appxmanifest 并选择打开方式。 从菜单中,选择 XML (文本)编辑器,然后单击确定。 然后,对清单进行以下更改:

之前

<Applications>
	<Application Id="MyApp"
	  Executable="$targetnametoken$.exe"
	  EntryPoint="My.App">
	</Application>
</Applications>

之后

<Applications>
	<Application Id="MyApp"
	  Executable="$targetnametoken$.exe"
	  EntryPoint="My.App">
		<Extensions>
			<uap:Extension Category="windows.shareTarget">
				<uap:ShareTarget Description="Share with MyApp">
					<uap:SupportedFileTypes>
						<uap:SupportsAnyFileType/>
					</uap:SupportedFileTypes>
					<uap:DataFormat>Text</uap:DataFormat>
					<uap:DataFormat>Bitmap</uap:DataFormat>
					<uap:DataFormat>Html</uap:DataFormat>
					<uap:DataFormat>StorageItems</uap:DataFormat>
					<uap:DataFormat>URI</uap:DataFormat>
				</uap:ShareTarget>
			</uap:Extension>
		 </Extensions>
	</Application>
</Applications>

此代码将添加对所有文件和数据格式的支持,但是你可以选择指定所支持的文件类型和数据格式(请参阅 ShareTarget 类文档了解更多详细信息)。

为联系人添加注释

若要允许“我的人脉”共享窗口将应用程序显示为联系人的共享目标,你需要将联系人写入 Windows 联系人存储中。 若要了解如何编写联系人,请参阅联系人卡片集成示例

为了在与联系人共享时使你的应用程序显示为“我的人脉”共享目标,应用程序必须为该联系人编写注释。 注释是应用程序中与联系人相关联的一些数据。 注释必须包含与 ProviderProperties 成员中所需视图相对应的可激活的类,并且声明对 Share 操作提供支持。

你可以在应用运行过程中随时为联系人添加注释,但通常,在将联系人添加到 Windows 联系人存储后,你应该立即为联系人添加注释。

if (ApiInformation.IsApiContractPresent("Windows.Foundation.UniversalApiContract", 5))
{
	// Create a new contact annotation
	ContactAnnotation annotation = new ContactAnnotation();
	annotation.ContactId = myContact.Id;

	// Add appId and Share support to the annotation
	String appId = "MyApp_vqvv5s4y3scbg!App";
	annotation.ProviderProperties.Add("ContactShareAppID", appId);
	annotation.SupportedOperations = ContactAnnotationOperations::Share;

	// Save annotation to contact annotation list
	// Windows.ApplicationModel.Contacts.ContactAnnotationList 
	await contactAnnotationList.TrySaveAnnotationAsync(annotation);
}

“appId”是后跟“!” 和可激活的类 ID 的包系列名称。 若要查找你的包系列名称,请使用默认编辑器打开 Package.appxmanifest,然后查找“Packaging”选项卡。在这里,“App”是指与“共享目标”视图对应的可激活类。

作为“我的人脉”共享目标运行

最后,若要运行该应用,请替代应用主类中的 OnShareTargetActivated 方法,以处理共享目标激活。 ShareTargetActivatedEventArgs.ShareOperation.Contacts 属性将包含与之共享的联系人,如果这是标准共享操作(不是“我的人脉”共享),则将为空。

protected override void OnShareTargetActivated(ShareTargetActivatedEventArgs args)
{
	bool isPeopleShare = false;
	if (ApiInformation.IsApiContractPresent("Windows.Foundation.UniversalApiContract", 5))
	{
		// Make sure the current OS version includes the My People feature before
		// accessing the ShareOperation.Contacts property
		isPeopleShare = (args.ShareOperation.Contacts.Count > 0);
	}

	if (isPeopleShare)
	{
  		// Show share UI for MyPeople contact(s)
	}
	else
	{
		// Show standard share UI for unpinned contacts
	}
}

另请参阅