Windows 分享,Windows 8 中崭新的数据交互方式

  • Abel Avram
  • 贾国清

2011 年 9 月 27 日

话题:.NET语言 & 开发

微软最近推出了一项称为 Windows 分享(Windows Share)的机制,该机制可实现 Windows 8 中不同应用间的信息共享。应用间可对文本、位图、HTML 代码、URI、文件以及其他类型的数据进行共享,这种机制有着广泛的应用场景。例如,当应用收到信息后可同时将信息发送至 Twitter 和 Facebook,极大简化了向社交网络中再次发布的过程(信息自动传递而无需登陆不同的社交网站)。

微软高级项目经理 Billie Sue Chafins 和伙伴开发经理 Steve Seixeiro,在BUILD 2011大会上发表了题为“分享:用你的应用来提升 Windows 8 的分享体验”的演讲。他们详细介绍了即将发布的 Windows 8 中的分享特性。Windows 分享类似于某种全局剪贴板,可以在应用间相互传递信息,但与传统剪贴板不同的是,它能够更好的在系统中集成并且提供更加丰富的功能。

Windows 分享接受以下标准的数据格式:文本、富文本、位图、可存储项(如文件等)、URI、HTML 代码等,此外,其他一些扩展格式也可通过信息流传输:地址、联系人、人员信息、地理位置等。用户在应用中分享信息时,系统会列出所支持信息类型的应用清单,这时,只需从中选择一个,数据便会立即发出。

分享特性定义了传输过程中以下类型的参与者:

  • 源应用——任何可以与其他应用分享信息的应用
  • 目标应用——任何可以接受来自其他应用分享的数据的应用
  • 代理——数据源与目标之间的传输媒介

只要有可供分享的信息,大多数应用都可作为源应用,微软也鼓励开发者开发出具备源特性的应用。目标应用可以是那些对接受和处理信息感兴趣的应用。分享特性的好处在于,Windows 将会提供内置的信息交换协议,如此一来,开发者将免去为数据交换首先要在数据格式上达成一致的烦恼。对于扩展格式的引入,需要首先提供对已知数据格式的支持,所以,建议使用Schema.org中支持的标准数据格式。

举例来说,从 IE 中分享网页 URL 或文本到 Twitter 或 Facebook 这类社交网站,目标应用是 Tweet@rama 和 Socialite 这种负责将数据发送到各自网络的应用。信息分享的方式和途径多种多样,这些都等着开发者在更多的应用中实践。

要想分享数据,源应用首先需要在数据传输管理器(Data Transfer Manager)中注册,当用户在 Windows 选择分享操作时会首先列出已注册的数据源,然后准备数据包(Data Package)并通过异步调用的方式将数据包传送给代理。代理会根据接收到的数据类型,从已注册的目标应用中选择目标应用,然后显示出供用户选择。一旦用户选择了发送目标,代理将激活该应用并同时将数据包传输给它。整个过程完成后,目标应用会给出传输完毕的提示,整个过程如下图所示:

分享是由底层新增的 Windows.ApplicationModel.DataTransfer 模块实现,该模块与 Windows 运行时(WinRT)绑定。下面是用 JavaScript 实现的准备数据源的代码示例:

// 创建数据传输管理器(Data Transfer Manager)

var dataTransferManager = Windows.ApplicationModel.DataTransfer.DataTransferManager.getForCurrentView();

// 创建填充数据包的事件监听器

dataTransferManager.addEventListener("datarequested", function (e) {

// 将要分享的数据填充到数据包中

var request = e.request;

request.data.properties.title = "Title for data";

request.data.properties.description = "Description of the data";

request.data.setText("Text to share");

...

});

目标应用应具备修改应用描述文件以及创建 HTML 页面的功能,这样在进行分享时,目标应用才能被正确显示。Visual Studio 提供了创建这种应用的基础模板,大大简化了开发工作。

Windows 分享为 Windows 8 提供了一种便捷的可在应用间进行信息交互的方式,同时也与 Metro 界面相互兼容。

查看英文原文:Windows Share, a New Data Exchange Mechanism in Windows 8

.NET语言 & 开发