【问题标题】:watchOS2 app and iPhone app communicationwatchOS2 应用与 iPhone 应用通信
【发布时间】:2015-10-16 22:47:05
【问题描述】:

在 watchOS1 中,我们有一个方法“openParentApplication”。即使手机应用程序不在前台或后台运行,此方法也会与手机应用程序通信并立即获取回复。 watchOS2 我需要类似的东西。即使我的 iPhone 应用程序没有运行,我也希望我的手表应用程序能够立即与手机应用程序通信。 updateApplicationContext:error:sendMessage:replyHandler:errorHandler:transferUserInfo: 等方法在这种情况下没有帮助。

请有人给我建议一个更好的方法来实现这一点?

【问题讨论】:

标签: iphone watchos-2 watchconnectivity


【解决方案1】:

实际上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!"])
}

只要 Watch 和 iPhone 之间存在连接,此功能就会起作用。如果应用程序没有运行,系统会在后台启动它。所以,基本上它就像openParentApplication(_:reply:)

【讨论】:

    猜你喜欢
    • 2018-08-01
    • 1970-01-01
    • 2014-01-28
    • 1970-01-01
    • 1970-01-01
    • 2014-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多