支持邻近感应和点击 (HTML)
[ 本文适用于编写 Windows 运行时应用的 Windows 8.x 和 Windows Phone 8.x 开发人员。如果你要针对 Windows 10 进行开发,请参阅 最新文档 ]
作用
注意
邻近感应适用于希望通过“点击”**将轻松连接功能合并到应用中的开发人员。例如,这可能包括多人游戏,其中两位用户通过点击连接其设备,以建立共享的游戏会话。或者可能是一种应用,其客户点击设备并收到指向可获得详细信息或进行购买的链接。要使用点击手势在两台设备之间建立连接,两台设备都必须具有邻近感应设备,例如近场通信 (NFC) 射频硬件。
通过使用邻近感应,你可以增强应用以使用近场通信 (NFC) 和连接两台设备,而无需使用 Wi-Fi Direct 的网络。邻近感应和 NFC 使你可以借助简单的点击手势即可连接设备。如果两台设备之间的距离小于等于 4 厘米,或同时点击,则每个设备的操作系统会感知彼此的存在。你还可以使用 Wi-Fi Direct 的对等方浏览,连接在无线范围内运行你的应用程序的两台设备。然后,你可以连接两台设备以便共享内容(例如照片或链接)、创建多人游戏体验或者发布和订阅消息。
要点
设备必须有邻近设备(如近距离通信 (NFC) 无线电设备),才能支持点击连接。设备必须具有支持 Wi-Fi Direct 的 Wi-Fi 设备,才能支持对等方浏览。
本部分内容
主题 | 描述 |
---|---|
如果你使用邻近感应,你可以通过简单的点击手势,或浏览无线范围内的设备,即可在两台设备之间创建连接。你无需连接到网络。只需同时点击两台设备,或使用 Wi-Fi Direct 连接。 |
|
使用邻近感应,你可以在两台设备之间发布和订阅消息,并使用简单的点击手势将静态标记写入设备。如果两台设备相互之间距离在 3-4 厘米范围内,邻近感应会通知系统。 本主题演示如何使用邻近感应来发布或订阅消息。 |
|
本主题为应用开发人员提供指南,以便他们在将应用提交到应用商店之前测试其中的邻近感应并进行解答疑难。 |
开发人员受众
邻近感应旨在面向有以下需求的开发人员设计:需要扩展应用程序功能,以支持通过在无线范围内点击或通过浏览正在运行你的应用的其他设备(又称对等应用)来轻松建立连接。例如,这些应用可能包括一个多人游戏,其中两个用户同时点击设备可以建立共享游戏会话。或者,应用可能允许客户点击设备并接收指向某个位置的链接,在此位置可以获取更多信息或进行购买。
你可以使用邻近感应以支持在使用点击手势期间快速交换数据。或者,你可以使用点击利用基础结构网络、Wifi-Direct 或蓝牙来建立长期的信道。
注意
对于 Windows Phone 应用商店应用,不支持使用 Wi-Fi Direct 设置信道。你仅可使用基础结构网络或蓝牙设置长期信道。
属于 Windows.Networking.Proximity 命名空间的 Windows 运行时中的类支持邻近感应。你可以使用 ProximityDevice 类与 4 厘米范围内(含 4 厘米)的其他设备通信,并且在点击过程中交换少量数据。你可以使用 PeerFinder 类与对等应用进行通信,并设置长期套接字连接。对等应用是运行在另一台设备上的应用的另一个实例。
例如,以下代码使用 ProximityDevice 类的 GetDefault 静态方法为本地计算机获取对邻近感应设备的引用。通过将事件处理程序与 DeviceArrived 和 DeviceDeparted 事件进行关联,你可以知道设备何时进入或离开邻近感应。
function id(elementId) {
return document.getElementById(elementId);
}
WinJS.Application.onmainwindowactivated = function (e) {
if (e.detail.kind === Windows.ApplicationModel.Activation.ActivationKind.launch) {
var proximityDevice = Windows.Networking.Proximity.ProximityDevice.getDefault();
if (proximityDevice != null) {
proximityDevice.addEventListener("devicearrived",
proximityDeviceArrived, false);
proximityDevice.addEventListener("devicedeparted",
proximityDeviceDeparted, false);
}
else {
id("MessageBlock").innerHTML += "Failed to initialize proximity device.<br/>";
}
}
}
function proximityDeviceArrived() {
id("MessageBlock").innerHTML += "Proximate device arrived.<br/>";
}
function proximityDeviceDeparted() {
id("MessageBlock").innerHTML += "Proximate device departed.<br/>";
}
有关展示如何在同时点击设备或通过对等方浏览连接的设备之间建立网络连接的示例代码,请参阅快速入门:使用点击或浏览连接应用程序。有关展示如何在同时点击的设备之间共享少量消息的示例代码,请参阅快速入门:使用点击发布和订阅消息。有关展示如何创建多对等应用连接以及使用 PeerWatcher、ProximityDevice 和 PeerWatcher 对象动态扫描范围内的对等应用的示例代码,请参阅邻近感应示例。
要点
若要在你的应用中使用点击操作,你必须在应用的程序包清单中支持邻近感应功能。
要点
邻近感应 API 不提供身份验证。你应该避免通过这些 API 交换敏感数据。
如何确定是否支持邻近功能
如前所述,设备必须安装实现 Windows 邻近接口的设备,你才能使用邻近感应(有关实现 Windows 邻近接口的信息,请参阅 Windows 8 近距离近程实现规范。)。你可以通过以下方式确定是否已安装支持邻近感应的设备:检查 PeerFinder.SupportedDiscoveryTypes 属性以查看是否支持 Triggered 连接,检查 GetDefault 方法是否返回 NULL,或者获取所有邻近设备列表并确保列表至少列出一台设备。有关如何获取所有已安装的邻近设备列表的示例,请参阅 GetDeviceSelector 方法。
仅当应用在前台运行时启用邻近感应
如果你的应用已转移到后台,将禁用所有 ProximityDevice 和 PeerFinder 操作。如果你的应用正在前台运行,你只能发布和订阅消息或打开套接字连接。如果你打开套接字连接,然后你的应用转移到后台,则你的套接字连接将保持打开状态。
使用邻近感应激活应用
当你使用 PeerFinder 并点击以将应用连接到另一台设备上的对等应用时,如果该应用尚未运行或未在前台运行,Windows 将提示另一台设备的用户激活该应用。如果该应用已在前台运行,将在不首先提示用户的情况下引发激活事件。你也可以通过调用接受一个字符串参数的 PeerFinder.Start 方法重载来激活未在前台运行的应用。Start 方法的字符串参数包含发送到对等应用的消息。该应用将通过传递到激活参数的消息激活。
当你使用点击手势激活对等应用时,将引发 Activated 事件。激活 Kind 是 Launch。如果你通过使用 PeerFinder.Start 方法发送消息来激活事件,可以从启动参数的 Arguments 属性检索消息文本。如果为了打开 StreamSocket 而激活你的应用,则 Arguments 属性将返回字符串 Windows.Networking.Proximity.PeerFinder:StreamSocket。在此情况下,将 TriggeredConnectionStateChanged 属性设置为适当的事件处理程序,并调用 PeerFinder.Start 方法完成套接字连接。
app.onactivated = function (args) {
if (args.detail.kind === activation.ActivationKind.launch) {
if (args.detail.arguments == "Windows.Networking.Proximity.PeerFinder:StreamSocket") {
// Call PeerFinder.Start to begin multi-user mode.
}
else {
// Respond to the message string in args.detail.arguments
}
args.setPromise(WinJS.UI.processAll());
}
}
有关从应用手势激活而且自动完成套接字连接的应用的示例,请参阅快速入门:使用点击或浏览连接应用程序。
套接字通信协议
在使用 StreamSocket 对象向对等应用发送信息时,你应当定义有关如何共享信息的协议。例如,你可以使用 XML 格式、分隔的名称/值对,等等。当 PeerFinder 类在对等应用之间创建套接字连接时,它会连接这些应用,而不考虑应用的版本。因此,对于同一个应用你可能会拥有两个不同且相互通信的版本。例如,如果一个接收应用应当采用两个 4 字节值,该应用的较新版本以两个 8 字节值的形式发送数据以容纳较大的数据,则在处理数据时,应当采用 4 字节值的接收应用将遇到错误。你应当注意确保你的应用的较新版本仍能够使用通信协议与该应用的旧版本通信。也就是说,应确保你的应用的较旧版本能够忽略从该应用的较新版本发送的新信息而不会遇到问题。
提示
当对等应用通信时,你通常需要确定哪个应用将发送第一条消息,哪个应用将侦听。可用来确定应用是发送程序还是侦听程序的一种方法就是对 streamSocket.information.localAddress.canonicalName 和 streamSocket.information.remoteHostName.canonicalName 进行比较。通过测试本地主机名是否大于远程主机名,你将始终收到你的应用的两个实例之间的相反结果。
相关主题
Windows.Networking.Proximity namespace
示例