最近有很多人關(guān)心用app inventor2(以下簡稱AI2)進行藍牙通信的問題,這里制作了一個簡易的聊天工具,來說明如何使用AI2所提供的藍牙組件,來實現(xiàn)信息的發(fā)送與接收。 在日常生活中,我們經(jīng)常提及“藍牙”這個詞,得知它是一種通信手段,但并不了解通信背后的機制。在AI2中有兩個藍牙組件:藍牙客戶端、藍牙服務(wù)器,為什么需要兩種類型的藍牙組件?難道兩部通信中的藍牙設(shè)備,具有不一樣的角色?答案是肯定的。那么服務(wù)器與客戶端究竟有哪些區(qū)別呢? 藍牙通信過程分為三個步驟:
兩部手機之間要想實現(xiàn)藍牙通信,必須首先進行配對,配對成功之后才有可能建立連接。 建立連接也稱“握手”,就像打電話一樣,一方撥號,另一方必須摘機或按下接聽按鍵,才能實現(xiàn)通話。此時,撥號的一方是通信的發(fā)起者(請求者-requester),接聽的一方是通信的應答者(響應者responser),對應于藍牙通信,前者(發(fā)起者)就是客戶端,后者(應答者)就是服務(wù)器。 一旦建立了連接,接下來就可以開始收發(fā)消息了,此時,客戶端與服務(wù)器之間的關(guān)系是對等的,任何一方都可以發(fā)送消息,同時也可以接收消息。 從AI2中的兩個藍牙組件的代碼塊中,我們可以得知,兩個組件都可以發(fā)送及接收數(shù)字、文本以及字節(jié)碼,在這個建議聊天工具的例子中,只涉及到文本的收發(fā)。 為了便于識別兩個藍牙組件的差異,我們將制作兩個應用,分別實現(xiàn)服務(wù)器及客戶端的功能。首先實現(xiàn)服務(wù)器功能。 1、功能描述
2、界面設(shè)計 3、組件的命名及設(shè)置 4、屏幕初始化 在設(shè)計視圖中已經(jīng)勾選了接受連接復選框,因此這里直接調(diào)用藍牙服務(wù)器組件的“接受連接請求”過程,開啟藍牙服務(wù)。 5、接受連接請求 當藍牙服務(wù)器收到連接請求時,將自動完成連接,自定義過程“連接成功”用于設(shè)置用戶界面組件的狀態(tài),并啟用計時器。 6、在計時事件中偵聽消息 每隔1秒鐘,服務(wù)器執(zhí)行一次偵聽操作——獲取接收字節(jié)數(shù),如果藍牙客戶端在此前向服務(wù)器發(fā)送了消息(數(shù)字、文本或字節(jié)碼),那么服務(wù)器的接受字節(jié)數(shù)將大于零。 在聊天客戶端應用中,可能有三種操作:請求連接、發(fā)送消息或斷開連接,后面兩種操作都會向服務(wù)器發(fā)送文本消息:當執(zhí)行斷開連接操作時,會首先向服務(wù)器發(fā)送“斷開連接”四個字,然后再與服務(wù)器斷開連接。因此在上圖中,當接收到不同內(nèi)容的消息時,會執(zhí)行不同的操作——斷開連接,或者更新聊天記錄。 斷開連接過程首先讓藍牙服務(wù)器停止接受連接,然后設(shè)置用戶界面組件的狀態(tài),并禁用計時器。 更新聊天記錄過程會根據(jù)“發(fā)送”參數(shù)(邏輯值)判斷消息來源,如果是聊天服務(wù)器發(fā)送的消息,“發(fā)送”=真,則在聊天內(nèi)容前添加字符“服務(wù)器:”,否則添加字符“客戶端:”。 7、重新開啟藍牙服務(wù) 無論是客戶端還是服務(wù)器發(fā)起的斷開連接操作,都會導致取消勾選“接受連接選框”,此時可以重新勾選該復選框,讓藍牙服務(wù)器恢復服務(wù)狀態(tài)。當服務(wù)器與客戶端處于連接狀態(tài)時,也可以取消勾選該復選框,從而主動斷開連接。 8、主動斷開連接 當點擊斷開連接按鈕時,服務(wù)器首先向客戶端發(fā)送消息——“斷開連接”,然后斷開與客戶端之間的連接,并調(diào)用自定義過程“斷開連接”。這一功能與復選框的取消勾選有相似之處,都會中斷連接,但手段不同,前者(按鈕斷開)是斷開連接,而后者(復選框)是終止服務(wù)。 9、發(fā)送消息 當用戶在聊天內(nèi)容輸入框中輸入了文字,并點擊提交按鈕時,藍牙服務(wù)器將向客戶端發(fā)送消息,并更新聊天記錄。 10、處理連接失敗事件 以上是聊天服務(wù)器應用的實現(xiàn)過程,下一篇文章將講述聊天客戶端應用的實現(xiàn)過程,敬請期待。 |
|