iPhone與iWatch連接、控制、數據傳遞(Swift)的方法。本站提示廣大學習愛好者:(iPhone與iWatch連接、控制、數據傳遞(Swift)的方法)文章只能為提供參考,不一定能成為您想要的結果。以下是iPhone與iWatch連接、控制、數據傳遞(Swift)的方法正文
最近在做一個項目,涉及到iPhone設備和手表傳輸數據、控制彼此界面跳轉,在網上找了很多資料,發現國內的網站這方面介紹的不多,而國外的網站寫的也不是很全,所以在這寫這篇文章,給大家參考一下,望大神指點一二。
iPhone和iWatch配對這個不需要多說,百度搜索答案一大堆,這個是前提。
iPhone與iWatch交互的代碼有兩種情況,取決於iWatch的系統。iWatch OS1與OS2、3的方法不同,在OS1的系統中,iWatch發送數據的代碼如下
let userInfo:[String:String] = ["key":"value"] WKInterfaceController.openParentApplication(userInfo) { (replyInfo, error) -> Void in }
這個函數是發送消息,同時也是接收消息,接收到iPhone的回復是replyInfo。在iPhone端的AppDelegate中,接收消息的代碼:
func application(application: UIApplication, handleWatchKitExtensionRequest userInfo: [NSObject : AnyObject]?, reply: (([NSObject : AnyObject]!) -> Void)!) { }
接收到的消息是userInfo,回復給iWatch的數據是reply。
以上的代碼僅適用於watchOS1,之後的系統就沒有這個API了,對於OS2或OS3,使用的框架是WatchConnectivity,在這裡,我將直接提供我寫的類,並給出介紹和使用方法,大家可以直接復制代碼,在我注釋的地方寫自己的功能便可。
以下是iPhone端的代碼:
import UIKit import WatchConnectivity class IwatchSessionUtil: NSObject, WCSessionDelegate { //靜態單例 static let shareManager = IwatchSessionUtil() //初始化 private override init() { super.init() } // 連接機制 private let session:WCSession? = WCSession.isSupported() ? WCSession.default() : nil // 激活機制對象 func startSession(){ session?.delegate = self session?.activate() } // 檢測到watch端app func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) { print("AppleWatch匹配完成") } // 開始向Watch傳遞數據 func sessionDidBecomeInactive(_ session: WCSession) { } // 數據傳遞完了 func sessionDidDeactivate(_ session: WCSession) { } // watch側發送數據過來,iPhone接收到數據並回復數據過去 // message: watch側發送過來的信息 // replyHandler: iPhone回復過去的信息 func session(_ session: WCSession, didReceiveMessage message: [String : Any], replyHandler: @escaping ([String : Any]) -> Void) { // 在這裡,我們接收到watch發送過來的數據,可以用代理、代碼塊或者通知中心傳值到ViewController,做出一系列操作。 // 注!!:watch側發送過來信息,iPhone回復直接在這個函數裡回復replyHandler([String : Any])(replyHandler(數據)),這樣watch側發送數據的函數對應的reply才能接收到數據,別跟sendMessage這個函數混淆了。如果用sendMessage回復,那watch側接收到信息就是didReceiveMessage的函數。 } // iPhone向watch發送數據 // key: 數據的key值 // value: 數據內容 func sendMessageToWatch(key:String,value:Any) { session?.sendMessage([key : value], replyHandler: { (dict:Dictionary) in // 這裡是發送數據後的操作,比如寫個alert提示發送成功 // replyHandler是watch側didReceiveMessage函數接收到信息後reply回復過來的內容,這裡可以編輯自己需要的功能 }, errorHandler: { (Error) in // 發送失敗,一般是藍牙沒開,或手機開了飛行模式 }) } }
調用方法:
1、首先在iPhone的AppDelegate的didFinishLaunchingWithOptions函數中添加代碼
IwatchSessionUtil.shareManager.startSession(),確保WCSession能匹配到watch側的App
2、發送消息:調用方法IwatchSessionUtil.shareManager.sendMessageToWatch(key: , value: )即可,發送後接收到watch側的回復後的操作,直接在類sendMessage函數中編輯就行
3、watch側sendMessage發送信息給iPhone,iPhone側didReceiveMessage接收到信息,一系列操作上面已經注釋寫到。
iPhone端的介紹完畢,下面寫watch端的代碼,其實跟iPhone的沒什麼區別,這裡只是為了把這部分內容寫完全。
import WatchKit import WatchConnectivity class WatchSessionUtil: NSObject,WCSessionDelegate { // 靜態單例 static let sharedManager = WatchSessionUtil() // 初始化 private override init() { super.init() } // 連接機制 private let session:WCSession? = WCSession.isSupported() ? WCSession.default() : nil // 激活機制 func startSession(){ session?.delegate=self session?.activate() } // 檢測到iPhone的父應用 func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) { } // 接收到iPhone端發送過來的信息 // message: iPhone端發送過來的信息 // replyHandler: watch端回復給iPhone的內容 func session(_ session: WCSession, didReceiveMessage message: [String : Any], replyHandler: @escaping ([String : Any]) -> Void) { // 這裡也可以通過通知中心發送通知給InterfaceController,進行頁面操作,至於用什麼方法大家隨意。注意事項iPhone的代碼裡提到了,一樣的性質,這裡就不寫了。 } // 向iPhone側發送信息 func sendMessage(key:String, value:Any){ session?.sendMessage([key : value], replyHandler: { (reply: [String : Any]) in // 信息發送之後,收到iPhone端回復的操作 }, errorHandler: { (Error) in // 發送失敗 }) } }
watch的類添加在Extension的文件夾中,調用方法:
1、ExtensionDelegate文件的applicationDidFinishLaunching函數裡寫上WatchSessionUtil.sharedManager.startSession()
2、發送消息:調用方法IwatchSessionUtil.shareManager.sendMessageToWatch(key: , value: )即可,發送後接收到iPhone側的回復後的操作,直接在類sendMessage函數中編輯就行
3、iPhone側sendMessage發送信息給watch,watch側didReceiveMessage接收到信息,一系列操作上面已經注釋寫到。
以上所述是小編給大家介紹的iPhone與iWatch連接、控制、數據傳遞(Swift)的方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對網站的支持!