如何将我的UWP应用添加到其他应用的DataTransferManager.ShowShareUI()分享界面中
UWP应用添加到系统分享列表实现方案
你需要完成应用清单配置和分享激活逻辑处理两部分操作:
1. 配置应用清单声明共享目标
打开项目中的Package.appxmanifest文件,在<Applications>下对应应用的<Application>节点内添加共享目标扩展声明,示例配置如下:
<Extensions> <uap:Extension Category="windows.shareTarget"> <uap:ShareTarget> <uap:SupportedFileTypes> <!-- 支持所有文件类型可以写<uap:SupportsAnyFileType />,也可指定特定后缀 --> <uap:FileType>.txt</uap:FileType> <uap:FileType>.png</uap:FileType> <uap:FileType>.jpg</uap:FileType> </uap:SupportedFileTypes> <uap:DataFormat>Text</uap:DataFormat> <uap:DataFormat>Bitmap</uap:DataFormat> <uap:DataFormat>StorageItems</uap:DataFormat> <!-- 可根据需求添加自定义数据格式 --> </uap:ShareTarget> </uap:Extension> </Extensions>
你可以根据自身应用的功能,选择支持的分享数据类型,只有其他应用分享的内容匹配你声明的类型时,你的应用才会出现在分享列表中,示例分享界面如下:
2. 处理分享激活逻辑
重写App.xaml.cs中的OnShareTargetActivated方法,接收其他应用分享过来的内容并处理,示例代码如下:
protected override async void OnShareTargetActivated(ShareTargetActivatedEventArgs args) { var shareOperation = args.ShareOperation; if (shareOperation.Data.Contains(StandardDataFormats.Text)) { string sharedText = await shareOperation.Data.GetTextAsync(); // 处理分享的文本逻辑 } else if (shareOperation.Data.Contains(StandardDataFormats.Bitmap)) { var bitmapStream = await shareOperation.Data.GetBitmapAsync(); // 处理分享的图片逻辑 } else if (shareOperation.Data.Contains(StandardDataFormats.StorageItems)) { var storageItems = await shareOperation.Data.GetStorageItemsAsync(); // 处理分享的文件逻辑 } // 处理完成后告知系统操作结束 shareOperation.ReportCompleted(); // 如需跳转到指定页面处理,可在此处添加页面导航逻辑 Frame rootFrame = Window.Current.Content as Frame; if (rootFrame == null) { rootFrame = new Frame(); Window.Current.Content = rootFrame; } rootFrame.Navigate(typeof(YourShareHandlePage), shareOperation); Window.Current.Activate(); }
注意事项
- 如果你需要支持分享任意类型的文件,可把
<uap:SupportedFileTypes>下的指定文件类型替换为<uap:SupportsAnyFileType /> - 调试时可直接使用系统自带的文件资源管理器、照片应用、记事本等发起分享,验证你的应用是否出现在分享列表
- 应用必须正确安装到系统后,才会被系统识别为合法的分享目标,调试时直接从Visual Studio部署即可生效
内容的提问来源于stack exchange,提问作者And. R.
相关产品推荐
相关产品推荐

