即使应用程序在后台,手表应用程序也可以接收背景信息吗?

时间:2018-04-09 08:15:09

标签: ios watchkit watch-os

我无法弄清楚如何在手表应用程序被预设之前让updateApplicationContext数据到达手表。它似乎只适用于手表应用程序的前景。

手表如何在后台接收文件?

这就是我一直在努力实现的目标:

iOS代码:

func sendDataToWatch() {
        if WCSession.isSupported() {
            do {
                try WCSession.default.updateApplicationContext(["key":value])
            } catch {
                print("ERROR: \(error)")
            }
        }
    }

观看代码:

func session(_ session: WCSession, didReceiveApplicationContext
        applicationContext:[String : Any]) {

      //handle data when it arrives

    }

我注意到WatchConnectivity提供了一个处理函数。这是我应该设置的,以便在Watch App背景或甚至没有启动时能够处理后台连接吗?

func handle(_ backgroundTasks: Set<WKRefreshBackgroundTask>) {
    // Sent when the system needs to launch the application in the background to process tasks. Tasks arrive in a set, so loop through and process each one.
    for task in backgroundTasks {
        // Use a switch statement to check the task type
        switch task {
        case let backgroundTask as WKApplicationRefreshBackgroundTask:
            // Be sure to complete the background task once you’re done.
            backgroundTask.setTaskCompletedWithSnapshot(false)
        default:
            // make sure to complete unhandled task types
            task.setTaskCompletedWithSnapshot(false)
        }
    }
}

1 个答案:

答案 0 :(得分:0)

根据apple,您可以使用SendMessage将数据从iPhone发送到Apple Watch,同时可以访问会话。

https://developer.apple.com/documentation/watchconnectivity/wcsession/1615687-sendmessage

  

在WatchKit扩展名处于活动状态时调用此方法   并运行在后台唤醒相应的iOS应用程序   让它可以到达。

您可以使用以下方法将数据从iPhone发送到Apple Watch

Swift 2.2

let msg = ["IPrequest":"IsLogin"]

WCSession.defaultSession().sendMessage(msg, replyHandler: { (replyDict) in
    print(replyDict)
    }, errorHandler: { (error) in
        print(error)
})

使用以下方法接收字典

Swift 2.2

func session(session: WCSession, didReceiveMessage message: [String : AnyObject], replyHandler: ([String : AnyObject]) -> Void)
{

    dispatch_async(dispatch_get_main_queue()) { () -> Void in

        print("Response:\(message)")

    }
}

我已经在我的一个项目中实现了上述解决方案。

希望它会对你有所帮助!