其实sendMessage:replyHandler:errorHandler:
正在做你正在要求的东西。只要您的手表连接到您的手机,它会立即获得对该信息的回复。当应用程序处于前台,后台或根本不运行时,此功能正在运行。
这里是你如何设置它:
在WatchExtension:
设置会话。通常,在你的ExtensionDelegate:
func applicationDidFinishLaunching() {
if WCSession.isSupported() {
let session = WCSession.defaultSession()
session.delegate = self
session.activateSession()
}
}
然后当你需要从应用程序的东西发送消息:
if WCSession.defaultSession().reachable {
let messageDict = ["message": "hello iPhone!"]
WCSession.defaultSession().sendMessage(messageDict, replyHandler: { (replyDict) -> Void in
print(replyDict)
}, errorHandler: { (error) -> Void in
print(error)
}
}
在iPhone应用程序:
相同的会话建立,但是这一次还设置委托:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
...
if WCSession.isSupported() {
let session = WCSession.defaultSession()
session.delegate = self
session.activateSession()
}
}
然后实现委托方法来回复发送到手表:
func session(session: WCSession, didReceiveMessage message: [String : AnyObject], replyHandler: ([String : AnyObject]) -> Void) {
replyHandler(["message": "Hello Watch!"])
}
这工作只要有监视和iPhone之间的连接。如果应用程序未运行,系统将在后台启动它。所以,基本上它就像openParentApplication(_:reply:)
我一直在寻找相同的解决方案一段时间,但我找不到任何可以满足我需要的东西。有类似的话题在这里:http://stackoverflow.com/questions/33136536/watchos2-wcsession-sendmessage-doesnt-wake-iphone-on-background – Eluss