是否可以从我的应用程序向我的watchOS扩展程序发送消息,所以我从前。可以更新我的手表用户界面吗?
我使用WKInterfaceController.openParentApplication
从观看扩展程序向应用程序发送信息。但是我该如何做相反的方式 - 从App到Watch扩展?
答案 0 :(得分:1)
如果您正在为watchOS2开发,可以使用WatchConnectivity。这为您提供了几种在手表和iPhone之间来回传输数据的选项。
如果要将手表中的消息发送到iPhone(两者都处于活动状态时),请使用交互式消息传递。阅读有关WatchConnectivity的更多信息,了解发送数据的不同方式。我会给你一个简短的代码示例。
您需要在watch和iOS上扩展WCSessionDelegate。
if (WCSession.isSupported()) {
let session = WCSession.defaultSession()
session.delegate = self
session.activateSession()
}
if (WCSession.defaultSession().reachable) {
//This means the companion app is reachable
}
在您的手表上,这将发送数据。
let data = //This is the data you will send
WCSession.defaultSession().sendMessage(data,
replyHandler: { ([String : AnyObject]) → Void in
})
errorHandler: { (NSError) → Void in
});
在你的iPhone上接收数据实现委托方法:
func session(_ session: WCSession,
didReceiveMessage message: [String : AnyObject])
答案 1 :(得分:0)
更新@Philip设置会话后需要做的回答
你需要使用replyHandler方法从iPhone获取数据到WatchOS App Extention,就像这样
WCSession.default.sendMessageData(Data(), replyHandler: { (data) in
let deviceId = String(data: data, encoding: .utf8)
print("DEVICE ID : \(deviceId)")
DataModel.shared.deviceId = deviceId
}, errorHandler: nil)
这将根据您的要求从Watch App Extension调用。
在Main App Delegate中,您需要实现WatchKit Session Delegate
// WATCH OS MESSAGE RECIEVE WITH REPLY HANDLER
func session(_ session: WCSession, didReceiveMessageData messageData: Data, replyHandler: @escaping (Data) -> Void) {
print("SESSION MESSSAGE DATA: \(messageData)")
if let deviceId = UIDevice.current.identifierForVendor?.uuidString,
let data = deviceId.data(using: .utf8) {
print("REPLY HANDLER MESSSAGE DATA: \(data)")
replyHandler(data)
}
}
在replyHandler
中,您可以Data
格式传递信息。