與擴充套件配件通訊,需要你同配件廠商通力合作,並理解其配件所提供的服務。而廠商必須精準的支援其硬體裝置同ios之間的通訊。作為支援的一部分,其配件必須支援至少一種命令列協議,該協議用於配件與其相配套的應用之間進行資料的傳輸,並且廠家可以自定義該協議,或者使用其他廠商支援的標準協議,而蘋果公司並不註冊或管理該協議。
要與廠商生產的配件相通訊,你必須知道該配件所支援的協議,為了避免衝突,協議名稱應使用反向網域名稱字串,這就使得廠商能夠定義出足夠的協議名稱以支援其生產的配件。 概述
與配件通訊,你需要從硬體廠商那裡獲取配件的必要資訊,由此,你才可使用擴充套件配件框架中的類使配件與你的應用進行通訊。
在工程中引用擴充套件配件框架
為了使用擴充套件配件框架的特性,你必須將 externalaccessory.framework 新增到你的工程中並將其鏈結到所有相關的目標中。而後,在所有相關的原始檔頂部新增#import
以便其能夠訪問框架中的類及標頭檔案。
宣告應用支援的協議
應用若要與配件通訊,必須在 info.plist 檔案中宣告其所支援的協議。宣告所支援的協議,系統才能在配件連線後載入該應用,如果裝置上沒有安裝支援所連線的配件的應用,那麼,系統會開啟應用商店,並指出支援的應用。
在 info.plist 檔案中新增鍵值 uisupportedexternalaccessoryprotocols 以宣告你的應用所支援的協議。該鍵值對應乙個包含字串的陣列,儲存你的應用所支援的所有協議,可以是無序且任意個數的。系統會使用該列表判斷你的應用能否與配件通訊,而不會決定你的應用具體使用哪個協議通訊。至於使用的是哪個協議,當配件與應用開始通訊時,由你的**選擇合適的通訊協議。
與配件通訊
乙個應用通過建立類 easession 物件來管理與配件的通訊及互動,該類物件同系統底層合作傳輸或接收資料報。在應用中,資料的傳輸是通過 nsinputstream 和 nsoutputstream 物件進行的,這兩個流物件都是在通訊連線開始時,由會話物件生成的。為了接收資料,需要自定義的**類監聽輸入流,而傳送資料,需要將資料報寫入輸出流,而接收與傳送的資料報的格式由你與配件通訊時採用的協議決定。
相關文件:連線配件、監控配件相關事件 參見
注:存在多個配件物件支援乙個相同的協議的可能,若這種情況發生,由你的應用程式**決定使用哪個配件物件。
列表 1 給出了乙個檢查已連線的配件物件列表,並選擇第乙個被應用支援的配件物件的方法,並為該配件物件協議生成乙個會話,且配置號會話的輸入輸出流。當該方法返回了會話物件,則連線配件成功並開始傳送並接收資料。
列表 1 為配件建立會話
- (easession *)opensessionforprotocol:(nsstring *)protocolstring
}if (accessory)
}return session;
}
列表 2 處理流事件
// handle communications from the streams.
- (void)stream:(nsstream*)thestream handleevent:(nsstreamevent)streamevent
}
如果你的應用被系統掛起了,而此時有配件通知到達,那麼該通知被放進佇列中,而當你的應用再次執行時(不管是在前台還是後台),在佇列中的通知都將傳送給你的應用。通知也會合併及過濾,從而盡可能消除無關的事件。例如,當你的應用在掛起過程中,如果配件連線了,緊接著又斷開了連線,那麼,你的應用最終不會接收到任何通知來提示有這種事件發生。 iOS 裝置和外部配件的通訊
首先,如果我們的應用程式想跟外設傳輸資料,先要透過iphone的作業系統,也就是iphoneos,而最開始的認證過程也是在外設和iphoneos之間發生的,蘋果為這個過程提供了一顆認證晶元 這顆晶元的作用是用來讓iphoneos識別這個外設是經過蘋果公司承認的,他的通訊方式是i2c匯流排,而且每齣乙...
iOS執行緒間通訊
什麼叫做執行緒間通訊?在1個程序中,執行緒往往不是孤立存在的,多個執行緒之間需要經常進行通訊 執行緒間通訊的體現 1個執行緒傳遞資料給另1個執行緒 在1個執行緒中執行完特定任務後,轉到另1個執行緒繼續執行任務 執行緒間通訊常用方法 void performselectoronmainthread s...
QThread與其他執行緒間相互通訊
qthread的用法其實比較簡單,只需要派生乙個qthread的子類,實現其中的run虛函式就大功告成,用的時候建立該類的例項,呼叫它的start方法即可。但是run函式使用時有一點需要注意,即在其中不能建立任何gui執行緒 諸如新建乙個qwidget或者qdialog 如果要想通過新建的執行緒實現...