我正在尝试在我的 iOS 9.3/watchOS 2.2 应用程序中支持与多个手表配对的新功能。它似乎运行良好,只是我无法弄清楚 watchOS 应用程序如何确定配对的 iPhone 是否已切换到另一台 Apple Watch。
The docs https://developer.apple.com/library/ios/documentation/WatchConnectivity/Reference/WCSession_class/index.html#//apple_ref/doc/uid/TP40015237-CH1-SW56说WCSession
从 WatchKit 扩展的角度来看,在整个切换生命周期中保持激活状态,并且从我在 Xcode 中的测试来看,手表会话似乎报告即使手机已切换到另一块手表,iPhone 也可以访问。
我目前没有多个手表来检查实际设备上的行为是否相同。
针对您的问题的具体回答:
手表不再连接的事实并不明显,因为可以使用所有传输方法,包括即时消息传递。传输会被简单地推迟,直到用户切换回该手表为止。
由于未连接的手表仍然可以向其配对的 iPhone 发起传输,因此您可能必须实施某种握手或超时检测,并查看手机是否未能及时响应。
我的发现:
看来未连接的手表并不意味着知道用户已切换到另一块手表。正如您所指出的,手表应用程序的会话仍然处于活动状态,并且手表(模拟器)仍然报告电话可以连接。
未连接的手表应用程序can继续使用all转移方式包括交互式消息传递(尽管传出数据确实会被系统排队,并且直到用户切换回该手表后才会传输)。
我已经使用两种不同的方法验证数据已排队:
- 通过使用
transferUserInfo
来自手表的字典,让运行循环执行,重复该过程几次,然后检查outstandingUserInfoTransfers
array.
- 通过使用
sendMessage
回复处理程序仅在用户切换回该手表并收到响应后运行。
一旦切换回来,所有排队的传输都会被立即地发送到手机,然后手表接收任何交互式响应。
虽然未连接的手表能够将数据排队到其配对的 iPhone(因为其会话仍处于活动状态),但手机只能与其已连接的手表进行通信,因为手机不再与任何未连接的手表有活动会话。
新的示例代码:
你可以尝试一下新的快速切换示例代码 https://developer.apple.com/library/watchos/samplecode/QuickSwitch/Introduction/Intro.html。它用updateApplicationContext
将任何手表的指示符和颜色传递到手机。
您可以更改未使用的手表的指示符和颜色,使用 Xcode 设备窗格切换到该手表,然后注意到 iOS 应用程序立即显示该手表的新指示符和颜色(已排队)while手表没用过)。
可能的reachable
文档不一致:
在您的 WatchKit 扩展中,当以下情况时此属性的值为 YES:匹配会话在用户的 iPhone 上处于活动状态并且设备在范围内,以便可以进行通信。
由于我没有第二块手表,因此我无法测试未使用的手表的可达性是否会在手机移出范围后变为 false。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)