Android藍(lán)牙通信app

首先要了解藍(lán)牙,然后要知道藍(lán)牙是怎么工作的,下面是藍(lán)牙的工作流程:

1.發(fā)現(xiàn)周圍的藍(lán)牙設(shè)備

2.獲取發(fā)現(xiàn)設(shè)備的adress,根據(jù)adress得到遠(yuǎn)程設(shè)備的BluetoothDevice,然后創(chuàng)建BluetoothSocket,最后connect()



(1)BluetoothChat

例子的主Activity。onCreate()得到本地BluetoothAdapter設(shè)備,檢查是否支持。onStart()中檢查是否啟用藍(lán)牙,并請求啟用,然后執(zhí)行setupChat()。setupChat()中先對界面中的控件進(jìn)行初始化增加點(diǎn)擊監(jiān)聽器等,然創(chuàng)建BluetoothChatService對象,該對象在整個(gè)應(yīng)用過程中存在,并執(zhí)行藍(lán)牙連接建立、消息發(fā)送接受等實(shí)際的行為。


(2)BluetoothChatService

public synchronized void start():開啟mAcceptThread線程,由于樣例程序是僅2人的聊天過程,故之前先檢測mConnectThread和mConnectedThread是否運(yùn)行,運(yùn)行則先退出這些線程。

public synchronized voidconnect(BluetoothDevice device):取消CONNECTING和CONNECTED狀態(tài)下的相關(guān)線程,然后運(yùn)行新的mConnectThread線程。

public synchronized voidconnected(BluetoothSocket socket, BluetoothDevice device):開啟一個(gè)ConnectedThread來管理對應(yīng)的當(dāng)前連接。之前先取消任意現(xiàn)存的mConnectThread、mConnectedThread、mAcceptThread線程,然后開啟新mConnectedThread,傳入當(dāng)前剛剛接受的socket連接。最后通過Handler來通知UI連接OK。

public synchronized void stop():停止所有相關(guān)線程,設(shè)當(dāng)前狀態(tài)為NONE。

public void write(byte[] out):在STATE_CONNECTED狀態(tài)下,調(diào)用mConnectedThread里的write方法,寫入byte。

private void connectionFailed():連接失敗的時(shí)候處理,通知ui,并設(shè)為STATE_LISTEN狀態(tài)。

private void connectionLost():當(dāng)連接失去的時(shí)候,設(shè)為STATE_LISTEN狀態(tài)并通知ui。

內(nèi)部類:private class AcceptThread extendsThread:創(chuàng)建監(jiān)聽線程,準(zhǔn)備接受新連接。使用阻塞方式,調(diào)用BluetoothServerSocket.accept()。提供cancel方法關(guān)閉socket。

private class ConnectThread extendsThread:這是定義的連接線程,專門用來對外發(fā)出連接對方藍(lán)牙的請求和處理流程。構(gòu)造函數(shù)里通過BluetoothDevice.createRfcommSocketToServiceRecord(),從待連接的device產(chǎn)生BluetoothSocket.然后在run方法中connect,成功后調(diào)用BluetoothChatSevice的connected()方法。定義cancel()在關(guān)閉線程時(shí)能夠關(guān)閉相關(guān)socket。

private class ConnectedThread extendsThread:這個(gè)是雙方藍(lán)牙連接后一直運(yùn)行的線程。構(gòu)造函數(shù)中設(shè)置輸入輸出流。Run方法中使用阻塞模式的InputStream.read()循環(huán)讀取輸入流,然后post到UI線程中更新聊天消息。也提供了write()將聊天消息寫入輸出流傳輸至對方,傳輸成功后回寫入U(xiǎn)I線程。最后cancel()關(guān)閉連接的socket。


(3)DeviceListActivity

該類包含UI和操作的Activity類,作用是得到系統(tǒng)默認(rèn)藍(lán)牙設(shè)備的已配對設(shè)備列表,以及搜索出的未配對的新設(shè)備的列表。然后提供點(diǎn)擊后發(fā)出連接設(shè)備請求的功能。

代碼鏈接GitHub - hesiyi/MyBluetoothChat

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容