UWP学习记录12-应用到应用的通信
UWP学习记录12-应用到应用的通信
1、应用间通信
“共享”合约是用户可以在应用之间快速交换数据的一种方式。 例如,用户可能希望使用社交网络应用与其好友共享网页,或者将链接保存在笔记应用中以供日后参考。 如果你的应用需要为处于另一个应用的上下文中的用户快速完成内容接收,则可以考虑使用“共享”合约。
应用可以通过两种方式支持“共享”功能。 首先,应用可以是提供用户要共享的内容的源应用。 其次,应用可以是用户选择作为共享内容目标的目标应用。 一个应用也可以既是源应用,也是目标应用。 如果你希望你的应用作为源应用共享内容,则需要确定你的应用可以提供的数据格式。
除了“共享”合约外,应用还可以集成用于传输数据的传统技术,如拖放或复制和粘贴。 除了在 UWP 应用之间通信外,这些方法还支持在桌面应用程序之间共享。
2、共享数据
添加 DataRequested 事件处理程序以在用户每次调用共享时调用。 这种情况既会在用户点击应用中的控件(例如按钮或应用栏命令)时发生,也会在特定情况下(例如,如果用户完成某一关并获得了较高分数)自动发生。当发生 DataRequested 事件时,你的应用会收到 DataRequest 对象。 该对象包含 DataPackage,可用来提供用户要共享的内容。 你必须提供标题和要共享的数据。 描述是可选的,但建议提供。
你可以共享各种类型的数据,包括:
n 纯文本
n 统一资源标识符 (URI)
n HTML
n 格式化的文本
n 位图
n 纯文本
n 文件
n 自定义开发人员定义的数据
DataPackage 对象可以包含其中一种或多种格式(可任意组合)。
当你打包数据进行共享时,可以给出各种可提供与共享内容相关的其他信息的属性。 这些属性帮助目标应用改善用户体验。 例如,当用户通过多个应用共享内容时,可提供说明帮助。 共享图像或指向网页的链接时,添加一个缩略图可为用户提供直观的参考。 有关详细信息,请参阅 DataPackagePropertySet。
除了 Title,所有属性都是可选的。 Title 属性具有强制性,必须进行设置。
用于共享的 UI 由系统提供。 若要启动它,请调用 ShowShareUI 方法。
在大多数情况下,共享内容是一个简单直接的过程。 然而,意外总是有可能发生。 例如,应用可能需要用户选择用于共享的内容,但用户未选择任何内容。 若要处理这些情况,请使用 FailWithDisplayText 方法,它将在出现问题时向用户显示一条消息。
有时,它可能不宜立即准备用户要共享的数据。 例如,如果你的应用支持以几种可能的不同格式发送一个较大的图像文件,在用户进行选择之前,创建所有这些图像的效率非常低。若要解决此问题,DataPackage 可以包含委托 - 一种在接收应用请求数据时调用的函数。 我们建议你在用户想要共享的数据很消耗资源时使用委托。
3、接受数据
在用户调用“共享”时,系统将显示可能的目标应用列表。 为了显示在列表中,你的应用需要声明它支持“共享”合约。 这让系统知道你的应用可用于接收内容。
接下来,确定你支持的文件类型和数据格式。 共享 API 支持多种标准格式,如文本、HTML 和位图。 你还可以指定自定义文件类型和数据格式。 指定时,请记住源应用必须明确这些类型和格式,否则它们无法使用这些格式来共享数据。仅注册你的应用可以处理的格式。 当用户调用“共享”时,仅显示支持正在共享的数据的目标应用。
当用户选择你的应用时(通常从共享 UI 中可用目标应用的列表中进行选择),将引发 OnShareTargetActivated 事件。 你的应用需要处理此事件才能处理用户要共享的数据。用户要共享的数据包含在一个 ShareOperation 对象中。 你可以使用该对象来检查所包含的数据格式。
在某些情况下,你的应用可能需要花费一定时间来处理要共享的数据。 示例包括用户共享文件或图像的集合。 这些项目比简单文本字符串更大,因此处理时间较长。在调用 ReportStarted 之后,将不再有任何与你的应用所进行的用户交互。 因此,你不应该调用它,除非你的应用处于可以由用户关闭的位置。使用扩展共享,用户有可能会在你的应用获得来自 DataPackage 对象的所有数据之前关闭源应用。 因此,我们建议你让系统知道你的应用何时已获得它所需的数据。 这样,系统可以根据需要暂停或终止源应用。
如果发生错误,调用 ReportError 向系统发送一条错误消息。 用户在检查共享的状态时将看到该消息。 此时,你的应用将关闭并且共享将结束。 用户将需要再次启动才能将内容共享到你的应用。 根据你的方案,你可能确定某个特殊错误并不严重,不足以结束共享操作。 在这种情况下,你可以选择不调用 ReportError 并且继续此共享。
最后,当你的应用成功处理好共享内容之后,你应当调用 ReportCompleted 来通知系统。在使用这些方法时,通常按照所述的顺序来进行调用,不要多次调用它们。 然而在某些时候,目标应用可能会在调用 ReportStarted之前调用 ReportDataRetrieved。 例如,应用可能在激活处理程序中执行任务时检索数据,但不调用 ReportStarted,直到用户单击“共享”按钮之后才调用。
当用户选择你的应用来接收内容时,我们建议你创建一个 QuickLink。 QuickLink 类似于快捷方式,可让用户更轻松地使用你的应用共享信息。 例如,你可以创建一个 QuickLink,用来打开预配置了好友电子邮件地址的新邮件。QuickLink 必须包含标题、图标和 ID。 当用户点击“共享”超级按钮时,会显示标题(类似“Email Mom”)和图标。 你的应用使用 ID 来访问任何自定义信息,如电子邮件地址或登录凭据。 当你的应用创建 QuickLink 时,该应用会通过调用 ReportCompleted,将 QuickLink 返回到系统。QuickLink 实际上并不存储数据。 而是包含一个标识符,如果选中该标识符,则会将该标识符发送至你的应用。 你的应用负责存储 QuickLink 的 ID 及相应的用户数据。 当用户点击 QuickLink 时,你可以通过 QuickLinkId 属性获取其 ID。
4、复制和粘帖
许多情况下,你无需编写用于支持剪贴板操作的代码。 可用于创建应用的许多默认 XAML 控件已经支持剪贴板操作。
除了复制和粘贴命令以外,你可能还想要跟踪剪贴板更改。 可通过处理剪贴板的 ContentChanged 事件来执行此操作。
UWP学习记录12-应用到应用的通信的更多相关文章
- UWP学习记录11-设计和UI
UWP学习记录11-设计和UI 1.输入和设备 通用 Windows 平台 (UWP) 中的用户交互组合了输入和输出源(例如鼠标.键盘.笔.触摸.触摸板.语音.Cortana.控制器.手势.注视等)以 ...
- UWP学习记录10-设计和UI之控件和模式7
UWP学习记录10-设计和UI之控件和模式7 1.导航控件 Hub,中心控件,利用它你可以将应用内容整理到不同但又相关的区域或类别中. 中心的各个区域可按首选顺序遍历,并且可用作更具体体验的起始点. ...
- UWP学习记录9-设计和UI之控件和模式6
UWP学习记录9-设计和UI之控件和模式6 1.图形和墨迹 InkCanvas是接收和显示墨迹笔划的控件,是新增的比较复杂的控件,这里先不深入. 而形状(Shape)则是可以显示的各种保留模式图形对象 ...
- UWP学习记录8-设计和UI之控件和模式5
UWP学习记录8-设计和UI之控件和模式5 1.日历.日期和时间控件 日期和时间控件提供了标准的本地化方法,可供用户在应用中查看并设置日期和时间值. 有四个日期和时间控件可供选择,选择的依据如下: 日 ...
- UWP学习记录7-设计和UI之控件和模式4
UWP学习记录7-设计和UI之控件和模式4 1.翻转视图 使用翻转视图浏览集合中的图像或其他项目(例如相册中的照片或产品详细信息页中的项目),一次显示一个项目. 对于触摸设备,轻扫某个项将在整个集合中 ...
- UWP学习记录6-设计和UI之控件和模式3
UWP学习记录6-设计和UI之控件和模式3 1.按钮 按钮,响应用户输入和引发 Click 事件的控件. 使用<Button>就能创建一个按钮控件了.按钮是 ContentControl, ...
- UWP学习记录5-设计和UI之控件和模式2
UWP学习记录5-设计和UI之控件和模式2 1.应用栏和命令栏 CommandBar 控件是一款通用.灵活.轻型的控件,可显示复杂内容(如图像或文本块)以及简单的命令(如 AppBarButton.A ...
- UWP学习记录4-设计和UI之控件和模式1
UWP学习记录4-设计和UI之控件和模式1 1.控件和事件简介 在 UWP 应用开发中,控件是一种显示内容或支持交互的 UI 元素. 控件是用户界面的构建基块. 我们提供了超过 45 种控件供你使用, ...
- UWP学习记录3-设计和UI之样式
UWP学习记录3-设计和UI之样式 1.颜色 在系统的“设置”>“个性化”>“颜色”里,提供了主题色选择.选定主题色后,会根据颜色亮度的 HSB 值创建浅色和深色的主题色. 应用可使用阴影 ...
随机推荐
- split分割大文件--包含通过awk按规则分割文件到对应子文件
当对一个大文件进行传输或者分析的时候,一个可以参考的办法是先通过split对文件进行分割,再对每个子文件进行处理,如果需要合并再进行合并. split函数可以按文件大小或者行数来进行分割. -a : ...
- volatile关键字 学习记录1
虽然已经工作了半年了...虽然一直是在做web开发....但是平时一直很少使用多线程..... 然后最近一直在看相关知识..所以就有了这篇文章 用例子来说明问题吧 public class Volat ...
- MySQL性能优化:索引
MySQL性能优化:索引 索引提供指向存储在表的指定列中的数据值的指针,然后根据您指定的排序顺序对这些指针排序.数据库使用索引以找到特定值,然后顺指针找到包含该值的行.这样可以使对应于表的SQL语句执 ...
- 显示oracle表的分区信息
显示分区表信息 显示数据库所有分区表的信息:DBA_PART_TABLES 显示当前用户可访问的所有分区表信息:ALL_PART_TABLES 显示当前用户所有分区表的信息:USER_PART_TAB ...
- 一起阅读《Java多线程编程核心技术》
目录 第一章 Java多线程技能 (待续...)
- XUnit - Shared Context between Tests
原文 单元测试类通常都会有share setup和cleanup的相关代码.xUnit.net根据共享的范围提供了几种share setup和cleanup的方法. Constructor and D ...
- [Windows] win7 配置Java开发环境
Installed Softwares Git for windows 64 bit Java 7 & 8 64 bit apache maven 3.3.3 Intellij Idea ID ...
- 弹框控件 UIAlertView UIActionSheet
// 创建弹框 从底部弹出,一般用于危险操作 UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:@"恭喜通关" ...
- 五大主流浏览器 CSS3 和 HTML5 兼容性大比拼
各大主流浏览器对 CSS3 和 HTML5 的支持越来越完善,曾经让多少前端开发人员心碎的IE系也开始拥抱标准.就在前几天,W3C的 HTML5 社区领袖 Shelley 宣布,HTML5的开发工作已 ...
- Oracle EBS R12的启停脚本
以下脚本用root用户登录执行: 一.DB启停使用EBS提供的脚本ebs_start.shsu - oraprod -c "/d01/oracle/PROD/db/tech_st/10.2. ...