我无法弄清楚如何在手表应用程序被预设之前让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)
}
}
}
答案 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)")
}
}
我已经在我的一个项目中实现了上述解决方案。
希望它会对你有所帮助!