iPhone與iWatch串連、控制、資料傳遞(Swift),iphoneiwatch

來源:互聯網
上載者:User

iPhone與iWatch串連、控制、資料傳遞(Swift),iphoneiwatch

      最近在做一個項目,涉及到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 UIKitimport WatchConnectivityclass 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 WatchKitimport WatchConnectivityclass 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接收到資訊,一系列操作上面已經注釋寫到。

內容就這麼多,已經很全了,這裡給出的是Swift代碼,OC的代碼我給個網址大家參照一下:http://blog.csdn.net/shenjie12345678/article/details/61913968

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.