#記事一覧
Swift MkMapViewで地図アプリ作成してみた(記事一覧)
#watchOSからiOSにデータ送信を要求する
###sendMessageでiOSにデータ送信を要求する
watchOSのアプリが非アクティブであれば、iOSのアプリからのデータを受け取れない。
そのため、watchOSのアプリがアクティブになった時に、sendMessageでiOSのアプリにデータ送信を要求する。
InterfaceController.swift:
override func willActivate() {
// This method is called when watch view controller is about to be visible to user
super.willActivate()
// 画面描画時(アクティブになった時)にiOSのアプリにデータ送信を要求する
let contents = ["GET":"LONLAT"]
self.session.sendMessage(contents, replyHandler: { (replyMessage) -> Void in
print (replyMessage);
}) { (error) -> Void in
print(error)
}
}
#iOSでメッセージを受信するとwatchOSにデータを送信する
###watchOSからのメッセージを受信する
sessionメソッドを定義すると、watchOSからsendMessageで送信したデータを受信できる。
以下の処理はiOSのアプリが起動していれば非アクティブの状態でも動作する。
ViewController.swift:watchOSからのメッセージを受信する
// watchOSからMessage受信
public func session(_ session: WCSession, didReceiveMessage message: [String : Any], replyHandler: @escaping ([String : Any]) -> Swift.Void){
print("receiveMessage::\(message)")
replyHandler(["message" : "received message."])
}
###watchOSにデータを送信する
sessionメソッドを実装する。
Swift MkMapViewで地図アプリ作成してみた(14)- iOSから送信したデータをwatchOSで受信するで送信したデータを再送する。
ViewController.swift:watchOSにデータを送信する
// watchOSからMessage受信
public func session(_ session: WCSession, didReceiveMessage message: [String : Any], replyHandler: @escaping ([String : Any]) -> Swift.Void){
print("receiveMessage::\(message)")
replyHandler(["message" : "received message."])
// String型以外は処理しない
guard let getType = message["GET"] as? String else {
return
}
switch getType {
case "LONLAT":
// watchOSにロングタップしてピンを立てた地点の緯度経度を送信
let contents = ["lon":dlon, "lat":dlat]
self.session.sendMessage(contents as [String : Any], replyHandler: { (replyMessage) -> Void in
print ("receive from apple watch");
}) { (error) -> Void in
print(error)
}
default:
print("not exist type.")
}
}
#参考文書
WCSession - WatchConnectivity | Apple Developer Documentation