久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

iPhone與iWatch連接、控制、數(shù)據(jù)傳遞(Swift)的方法

這篇文章主要介紹了iPhone與iWatch連接、控制、數(shù)據(jù)傳遞(Swift)的方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下

最近在做一個項目,涉及到iPhone設(shè)備和手表傳輸數(shù)據(jù)、控制彼此界面跳轉(zhuǎn),在網(wǎng)上找了很多資料,發(fā)現(xiàn)國內(nèi)的網(wǎng)站這方面介紹的不多,而國外的網(wǎng)站寫的也不是很全,所以在這寫這篇文章,給大家參考一下,望大神指點一二。

      iPhone和iWatch配對這個不需要多說,百度搜索答案一大堆,這個是前提。

      iPhone與iWatch交互的代碼有兩種情況,取決于iWatch的系統(tǒng)。iWatch OS1與OS2、3的方法不同,在OS1的系統(tǒng)中,iWatch發(fā)送數(shù)據(jù)的代碼如下


let userInfo:[String:String] = ["key":"value"]
WKInterfaceController.openParentApplication(userInfo) { (replyInfo, error) -> Void in
}

      這個函數(shù)是發(fā)送消息,同時也是接收消息,接收到iPhone的回復(fù)是replyInfo。在iPhone端的AppDelegate中,接收消息的代碼:


func application(application: UIApplication, handleWatchKitExtensionRequest userInfo: [NSObject : AnyObject]?, reply: (([NSObject : AnyObject]!) -> Void)!) {
}

      接收到的消息是userInfo,回復(fù)給iWatch的數(shù)據(jù)是reply。

      以上的代碼僅適用于watchOS1,之后的系統(tǒng)就沒有這個API了,對于OS2或OS3,使用的框架是WatchConnectivity,在這里,我將直接提供我寫的類,并給出介紹和使用方法,大家可以直接復(fù)制代碼,在我注釋的地方寫自己的功能便可。

以下是iPhone端的代碼:


import UIKit
import WatchConnectivity
class IwatchSessionUtil: NSObject, WCSessionDelegate {
  //靜態(tài)單例
  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傳遞數(shù)據(jù)
  func sessionDidBecomeInactive(_ session: WCSession) {
  }
  // 數(shù)據(jù)傳遞完了
  func sessionDidDeactivate(_ session: WCSession) {
  }
  // watch側(cè)發(fā)送數(shù)據(jù)過來,iPhone接收到數(shù)據(jù)并回復(fù)數(shù)據(jù)過去
  // message: watch側(cè)發(fā)送過來的信息
  // replyHandler: iPhone回復(fù)過去的信息
  func session(_ session: WCSession, didReceiveMessage message: [String : Any], replyHandler: @escaping ([String : Any]) -> Void) {
    // 在這里,我們接收到watch發(fā)送過來的數(shù)據(jù),可以用代理、代碼塊或者通知中心傳值到ViewController,做出一系列操作。
    // 注!!:watch側(cè)發(fā)送過來信息,iPhone回復(fù)直接在這個函數(shù)里回復(fù)replyHandler([String : Any])(replyHandler(數(shù)據(jù))),這樣watch側(cè)發(fā)送數(shù)據(jù)的函數(shù)對應(yīng)的reply才能接收到數(shù)據(jù),別跟sendMessage這個函數(shù)混淆了。如果用sendMessage回復(fù),那watch側(cè)接收到信息就是didReceiveMessage的函數(shù)。
  }
  // iPhone向watch發(fā)送數(shù)據(jù)
  // key: 數(shù)據(jù)的key值
  // value: 數(shù)據(jù)內(nèi)容
  func sendMessageToWatch(key:String,value:Any) {
    session?.sendMessage([key : value], replyHandler: { (dict:Dictionary) in
    // 這里是發(fā)送數(shù)據(jù)后的操作,比如寫個alert提示發(fā)送成功
   // replyHandler是watch側(cè)didReceiveMessage函數(shù)接收到信息后reply回復(fù)過來的內(nèi)容,這里可以編輯自己需要的功能
    }, errorHandler: { (Error) in
      // 發(fā)送失敗,一般是藍牙沒開,或手機開了飛行模式
    })
  }
}

調(diào)用方法:

1、首先在iPhone的AppDelegate的didFinishLaunchingWithOptions函數(shù)中添加代碼

IwatchSessionUtil.shareManager.startSession(),確保WCSession能匹配到watch側(cè)的App

              2、發(fā)送消息:調(diào)用方法IwatchSessionUtil.shareManager.sendMessageToWatch(key: , value: )即可,發(fā)送后接收到watch側(cè)的回復(fù)后的操作,直接在類sendMessage函數(shù)中編輯就行

              3、watch側(cè)sendMessage發(fā)送信息給iPhone,iPhone側(cè)didReceiveMessage接收到信息,一系列操作上面已經(jīng)注釋寫到。

iPhone端的介紹完畢,下面寫watch端的代碼,其實跟iPhone的沒什么區(qū)別,這里只是為了把這部分內(nèi)容寫完全。


import WatchKit
import WatchConnectivity
class WatchSessionUtil: NSObject,WCSessionDelegate {
  // 靜態(tài)單例
  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的父應(yīng)用
  func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {
  }
  // 接收到iPhone端發(fā)送過來的信息
  // message: iPhone端發(fā)送過來的信息
  // replyHandler: watch端回復(fù)給iPhone的內(nèi)容
  func session(_ session: WCSession, didReceiveMessage message: [String : Any], replyHandler: @escaping ([String : Any]) -> Void) {
    // 這里也可以通過通知中心發(fā)送通知給InterfaceController,進行頁面操作,至于用什么方法大家隨意。注意事項iPhone的代碼里提到了,一樣的性質(zhì),這里就不寫了。
  }
  // 向iPhone側(cè)發(fā)送信息
  func sendMessage(key:String, value:Any){
    session?.sendMessage([key : value], replyHandler: { (reply: [String : Any]) in
      // 信息發(fā)送之后,收到iPhone端回復(fù)的操作
    }, errorHandler: { (Error) in
      // 發(fā)送失敗
    })
  }
}

watch的類添加在Extension的文件夾中,調(diào)用方法:

1、ExtensionDelegate文件的applicationDidFinishLaunching函數(shù)里寫上WatchSessionUtil.sharedManager.startSession()

2、發(fā)送消息:調(diào)用方法IwatchSessionUtil.shareManager.sendMessageToWatch(key: , value: )即可,發(fā)送后接收到iPhone側(cè)的回復(fù)后的操作,直接在類sendMessage函數(shù)中編輯就行

3、iPhone側(cè)sendMessage發(fā)送信息給watch,watch側(cè)didReceiveMessage接收到信息,一系列操作上面已經(jīng)注釋寫到。

以上所述是小編給大家介紹的iPhone與iWatch連接、控制、數(shù)據(jù)傳遞(Swift)的方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對html5模板網(wǎng)網(wǎng)站的支持!

【網(wǎng)站聲明】本站部分內(nèi)容來源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請聯(lián)系我們刪除處理,感謝您的支持!

相關(guān)文檔推薦

主站蜘蛛池模板: 久久久久9999| 黄视频网址 | 91在线观看网址 | 欧美一区二区三区在线看 | 国产成人精品免高潮在线观看 | 欧美九九九| 亚洲精品乱码久久久久久9色 | 激情a| 天天爽夜夜爽精品视频婷婷 | 日本三级全黄三级三级三级口周 | 日韩欧美大片在线观看 | 国产一区二区三区四区五区加勒比 | 国产精品久久久久久福利一牛影视 | 精品欧美乱码久久久久久 | 91欧美 | av在线免费观看网址 | 天天天操操操 | 91看片网| 国产真实精品久久二三区 | 成人1区2区 | 成av在线| 免费看a| 国产精品久久久亚洲 | 国产久| 狠狠爱综合网 | 欧美日韩亚洲国产综合 | 中文字幕在线观看视频网站 | 一区二区三区久久久 | 国产线视频精品免费观看视频 | 国产欧美日韩在线观看 | a级片在线 | 欧美日一区二区 | 久久精品91久久久久久再现 | 日本久久福利 | 草久久| 黄色精品 | 国产精品视频一 | 亚洲成人一区二区在线 | 一区二区av | 免费三级黄 | 欧美日韩国产高清 |