iOS 裝置與其配件間的通訊

2021-07-29 17:17:45 字數 1756 閱讀 3046

與擴充套件配件通訊,需要你同配件廠商通力合作,並理解其配件所提供的服務。而廠商必須精準的支援其硬體裝置同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 如果要想通過新建的執行緒實現...