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 值创建浅色和深色的主题色. 应用可使用阴影 ...
随机推荐
- 深夜用git真是醉了
t吐槽一下那些 感觉命令行高效的傻逼们 我只想吃个牛肉串 你让我先学会宰牛? 命令不是对底层代码的封装? 程序的终极奥义就是把很多复杂的东西,封装到一个按钮就能完成 .叫做简为美. 浪费别人的时间等 ...
- 室内定位系列(二)——仿真获取RSS数据
很多情况下大家都采用实际测量的数据进行定位算法的性能分析和验证,但是实际测量的工作量太大.数据不全面.灵活性较小,采用仿真的方法获取RSS数据是另一种可供选择的方式.本文介绍射线跟踪技术的基本原理,以 ...
- [转]PhpStorm 超强语言模板的支持
最近遇到一些PhpStorm编程的问题: 在使用Zen Coding插件时,PHPStorm不像Notepad++那样随便使用.PHPStorm只有在编辑识别为HTML的文件时才可以使用Zend Co ...
- mysql数据库存储路径更改 数据文件位置
使用了VPS一段时间之后发现磁盘空间快满了.本人的VPS在购买的时候买了500gb的磁盘,提供商赠送了20GB的高性能系统磁盘.这样系统就有两个磁盘空间了.在初次安装mysql 的时候将数据库目录安装 ...
- GSM07.10协议中串口复用使用的校验算法
] = { 0x00, 0x91, 0xE3, 0x72, 0x07, 0x96, 0xE4, 0x75, 0x0E, 0x9F, 0xED, 0x7C, 0x09, 0x98, 0xEA, 0x7B ...
- 常用快捷键: From Eclipse to Android Studio
Eclipse: ctrl+shift+L查看所有快捷键 alt+shift+r 重命名 ctrl+shift+F 格式化代码 alt+shift+s 添加未实现方法 alt+/ 代码助手提示 ct ...
- java关键包简易说明
java.lang 语言核心类,系统自动导入. java.util java工具类.集合框架.时间,日历等. java.net 网络编程接口和类. java.io 流的接口和类 java.te ...
- 【Python图像】给你的头像+1
早些年,微信朋友圈有段时间非常流行这个头像+1的套路,简直逼死强迫症. 将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果. 类似于图中效果 涉及知识: Pyt ...
- IIS网站或系统验证码不显示问题——"使用了托管的处理程序,但是未安装或未完整安装 ASP.NET"
在IIS上发布了一个系统,但是登陆页面的验证码图片一直出不来,尝试了各种办法,权限.路径.继承父类路径等都不管用,进入Login.html,对着无验证码图片的图标,右键复制图片的网址,粘贴到地址栏,出 ...
- linux Mint 安装apache2
sudo apt-get install apache2 y 启动apache2 /etc/init.d/apache2 restart 浏览器输入localhost看看是否访问正常 apache2 ...