新聞中心

        EEPW首頁 > 手機與無線通信 > 設計應用 > Android上藍牙通信功能開發

        Android上藍牙通信功能開發

        作者: 時間:2012-07-09 來源:網絡 收藏

          3. BluetoothChat 例程分析

          Google 提供的關于 Bluetooth 的例程為 Bluetoothchat ,使用截圖可見本文一開始。除去配置及 ui 定義等文件,主程序文件共三個:BluetoothChat.java 、 BluetoothChatService.java 以及 DeviceListActivity.java ,詳細可見下面的描述。

          3.1. 整體調用關系序列圖

          

        3.gif

        3.2. BluetoothChat.java

          例程的主 Activity 。 onCreate() 得到本地 BluetoothAdapter 設備,檢查是否支持。 onStart() 中檢查是否啟用,并請求啟用,然后執行 setupChat()。 setupChat() 中先對界面中的控件進行初始化增加點擊監聽器等,然創建 BluetoothChatService 對象,該對象在整個應用過程中存在,并執行連接建立、消息發送接受等實際的行為。

          3.3. BluetoothChatService.java

          public synchronized void start() :

          開啟 mAcceptThread 線程,由于樣例程序是僅 2 人的聊天過程,故之前先檢測 mConnectThread 和 mConnectedThread 是否運行,運行則先退出這些線程。

          public synchronized void connect(BluetoothDevice device) :

          取消 CONNECTING 和 CONNECTED 狀態下的相關線程,然后運行新的 mConnectThread 線程。

          public synchronized void connected(BluetoothSocket socket, BluetoothDevice device) :

          開啟一個 ConnectedThread 來管理對應的當前連接。之前先取消任意現存的 mConnectThread 、 mConnectedThread 、 mAcceptThread 線程,然后開啟新 mConnectedThread ,傳入當前剛剛接受的 socket 連接。最后通過 Handler 來通知 UI 連接 OK 。

          public synchronized void stop() :

          停止所有相關線程,設當前狀態為 NONE 。

          public void write(byte[] out) :

          在 STATE_CONNECTED 狀態下,調用 mConnectedThread 里的 write 方法,寫入 byte 。

          private void connectionFailed() :

          連接失敗的時候處理,通知 ui ,并設為 STATE_LISTEN 狀態。

          private void connectionLost() :

          當連接失去的時候,設為 STATE_LISTEN 狀態并通知 ui 。

          內部類:

          private class AcceptThread extends Thread :

          創建監聽線程,準備接受新連接。使用阻塞方式,調用 BluetoothServerSocket.accept() 。提供 cancel 方法關閉 socket 。

          private class ConnectThread extends Thread :

          這是定義的連接線程,專門用來對外發出連接對方的請求和處理流程。構造函數里通過 BluetoothDevice.createRfcommSocketToServiceRecord(),從待連接的 device 產生 BluetoothSocket. 然后在 run 方法中 connect ,成功后調用 BluetoothChatSevice 的 connected() 方法。定義 cancel() 在關閉線程時能夠關閉相關 socket 。

          private class ConnectedThread extends Thread :

          這個是雙方藍牙連接后一直運行的線程。構造函數中設置輸入輸出流。 Run 方法中使用阻塞模式的 InputStream.read() 循環讀取輸入流, 然后 post 到UI 線程中更新聊天消息。也提供了 write() 將聊天消息寫入輸出流傳輸至對方,傳輸成功后回寫入 UI 線程。最后 cancel() 關閉連接的 socket 。

          3.4. DeviceListActivity.java

          該類包含 UI 和操作的 Activity 類,作用是得到系統默認藍牙設備的已配對設備列表,以及搜索出的未配對的新設備的列表。然后提供點擊后發出連接設備請求的

          除了 RFCOMM 外, 上關于 Bluetooth 的還有 SDP 、 GAP 、耳機設備連接等內容,本文還未涉及,將會隨著藍牙相關 API 在新版本中的進一步完善來學習使用。

        數字通信相關文章:數字通信原理


        通信相關文章:通信原理



        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 罗田县| 乐清市| 麻栗坡县| 平遥县| 玛多县| 岱山县| 拉萨市| 宕昌县| 永德县| 万安县| 合江县| 休宁县| 工布江达县| 江山市| 华阴市| 平原县| 太白县| 逊克县| 资阳市| 隆尧县| 都昌县| 若尔盖县| 东台市| 宁津县| 梧州市| 囊谦县| 金塔县| 兴和县| 北票市| 华安县| 晋江市| 和林格尔县| 牟定县| 象州县| 邛崃市| 庆云县| 东光县| 竹山县| 兴海县| 饶阳县| 平利县|