《電子技術應用》
您所在的位置:首頁 > 其他 > 設計應用 > Android上藍牙通信功能開發:BluetoothChat例程分析
Android上藍牙通信功能開發:BluetoothChat例程分析
摘要: Bluetooth是幾乎現在每部手機標準配備的功能,多用于耳機mic等設備與手機的連接,除此之外,還可以多部手機之間建立bluetooth通信,本文就通過SDK中帶的一個聊天室的例程,來介紹一下Android上的Bluetooth的開發。
Abstract:
Key words :

  1. 概述

  Bluetooth 是幾乎現在每部手機標準配備的功能,多用于耳機 mic 等設備與手機的連接,除此之外,還可以多部手機之間建立 bluetooth 通信,本文就通過 SDK 中帶的一個聊天室的例程,來介紹一下 Android 上的 Bluetooth 的開發。

  在 Android1.x 的時候,相關 API 非常不完善,還不能簡單的使用 Bluetooth 開發,有一個開源項目可以幫助程序員使用、開發藍牙,支持直接方法 bluetooth 協議棧。在 Android2 以后,框架提供了一些官方 API 來進行藍牙的通信,但目前的程序也比較不完善。本文主要討論 Android2 后的 Bluetooth 通信的 API 使用方法。

  首先看聊天室的效果圖:

Android上<a class=藍牙通信功能開發:BluetoothChat例程分析" height="317" src="http://files.chinaaet.com/images/20110809/38a6aba3-3b6c-4287-a8bd-108dd07c4440.jpg" width="192" />

  2. Bluetooth 通信 API 介紹

  2.1. Bluetooth 通信過程

  

 

  2.2. Bluetooth API 的主要方法

  BluetoothAdapter 類

  BluetoothAdapter.getDefaultAdapter() :得到本地默認的 BluetoothAdapter ,若返回為 null 則表示本地不支持藍牙;

 

  isDiscovering() :返回設備是否正在發現周圍藍牙設備;

  cancelDiscovery() :取消正在發現遠程藍牙設備的過程;

  startDiscovery() :開始發現過程;

  getScanMode() :得到本地藍牙設備的 Scan Mode ;

  getBondedDevices() :得到已配對的設備;

  isEnabled() :藍牙功能是否啟用。

  當發現藍牙功能未啟用時,如下調用設置啟用藍牙:

 

  如果發現當前設備沒有打開對外可見模式,則傳遞 Intent 來調用打開可發現模式,代碼如下:

 

  BluetoothDevice 類,此為對應的遠程藍牙 Device

  createRfcommSocketToServiceRecord() :創建該 Device 的 socket 。

  BluetoothSocket 類

  connect() :請求連接藍牙。

  getInputStream() :得到輸入流,用于接收遠程方信息。

  getOutputStream() :得到輸出流,發送給遠程方的信息。

  close() :關閉藍牙連接。

  InputStream 類:

  read(byte[]) :以阻塞方式讀取輸入流。

  OutputStream 類:

  write(byte[]) :將信息寫入該輸出流,發送給遠程。

 

  3. BluetoothChat 例程分析

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

  3.1. 整體調用關系序列圖

  

 

  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 通信外, Android 上關于 Bluetooth 的還有 SDP 、 GAP 、耳機設備連接等內容,本文還未涉及,將會隨著藍牙相關 API 在新版本中的進一步完善來學習使用。

此內容為AET網站原創,未經授權禁止轉載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
亚洲视频第一页| 欧美母乳在线| 国产日韩欧美日韩大片| 欧美在线观看一区| 欧美日韩一区二区欧美激情| 亚洲影音一区| 欧美午夜不卡在线观看免费 | 久久午夜电影| 亚洲五月六月| 欧美午夜精品久久久久久人妖| 亚洲激情综合| 激情综合自拍| 久久久蜜桃一区二区人| 亚洲欧美日韩中文播放| 国产精品九九久久久久久久| 亚洲精品视频啊美女在线直播| 狠狠色狠狠色综合日日tαg| 欧美在线观看www| 亚洲制服av| 国产欧美日韩中文字幕在线| 午夜久久久久久久久久一区二区| 亚洲精品一二| 国产精品成人一区二区艾草| 亚洲午夜在线视频| 亚洲一区二区三区在线视频 | 免费在线观看一区二区| 久久国产日韩| 国外成人在线| 免费不卡中文字幕视频| 亚洲激情欧美| 亚洲欧美日韩天堂一区二区| 欧美一级久久久久久久大片| 国产精品美女在线观看| 亚洲一区综合| 一本一本久久a久久精品综合麻豆| 欧美精品videossex性护士| 亚洲精品一区二区三区av| 亚洲国产精品一区二区第一页| 久久一区中文字幕| 亚洲精选成人| 亚洲女人天堂成人av在线| 国产一区91| 欧美激情精品久久久六区热门| 在线观看日韩国产| 国产精品久久久久9999| 久久久久久久一区二区| 日韩午夜电影| 久久成人久久爱| 国产精品你懂得| 久久精品中文| 欧美一级片一区| 蜜桃精品久久久久久久免费影院| 亚洲中字黄色| 99精品国产99久久久久久福利| 亚洲高清视频在线观看| 一区二区三区在线视频播放| 你懂的成人av| 亚洲欧美日韩一区在线观看| 欧美成人精品在线观看| 亚洲午夜久久久久久久久电影网| 快播亚洲色图| 亚洲欧洲精品一区二区三区不卡| 午夜一区不卡| 亚洲视频你懂的| 欧美不卡视频一区发布| 一本久久a久久精品亚洲| 欧美大片免费看| 亚洲毛片在线| 国产主播精品| 欧美韩日一区二区三区| 久久精品亚洲一区| 午夜视频在线观看一区| 最新国产乱人伦偷精品免费网站| 欧美日韩在线视频首页| 亚洲一区自拍| 欧美精品一区二区三区久久久竹菊| 欧美日韩成人精品| 一区二区三区回区在观看免费视频| 亚洲伦理网站| 欧美久久一级| 91久久在线视频| 在线观看欧美精品| 欧美精品日韩一本| 亚洲精品一区中文| 一色屋精品视频免费看| 亚洲免费视频在线观看| 91久久极品少妇xxxxⅹ软件| 亚洲国产综合在线| 欧美日韩精品二区第二页| 亚洲欧美日韩国产中文| 亚洲视屏一区| 欧美日韩在线另类| 欧美在线看片a免费观看| 日韩网站在线| 国产伦精品一区二区三区四区免费 | 校园春色综合网| 亚洲精品国产精品乱码不99按摩| 久久综合久久久久88| 性色一区二区三区| 国产一区二区三区精品欧美日韩一区二区三区 | 中文一区二区| 另类春色校园亚洲| 欧美高清视频| 欧美女同在线视频| 亚洲一区二区三区精品在线观看| 国产私拍一区| 久久综合一区二区三区| 亚洲欧美国产精品va在线观看| 久久久夜色精品亚洲| 亚洲精品一区二区三区婷婷月| 欧美区二区三区| 久久青草久久| 久久成人av少妇免费| 久久激情婷婷| 亚洲国产第一| 久久精品国产久精国产爱| 一区二区三区欧美日韩| 亚洲国产日韩欧美| 国产美女精品视频| 欧美三级在线| 欧美日本高清视频| 久久久久久噜噜噜久久久精品| 午夜精品av| 亚洲国产精品综合| 亚洲国产精品成人综合| 亚洲另类在线视频| 久久国产精彩视频| 亚洲欧美中日韩| 亚洲一二三级电影| 一区二区三区视频在线| 亚洲视频专区在线| 一区二区三区国产精品| 99av国产精品欲麻豆| 99爱精品视频| 亚洲一区成人| 亚洲视频在线免费观看| 欧美一区二区久久久| 久久精品人人爽| 亚洲一区二区视频在线| 亚洲天堂免费在线观看视频| av不卡在线| 中文国产成人精品| 新片速递亚洲合集欧美合集| 欧美中文字幕视频| 欧美电影免费| 国产精品v欧美精品v日韩精品| 国产一区二区在线免费观看| 国产一区91精品张津瑜| 制服丝袜激情欧洲亚洲| 午夜精品视频一区| 亚洲国产日韩欧美在线99 | 亚洲一二三区视频在线观看| 老司机一区二区| 亚洲黄色免费电影| 亚洲欧美日韩国产一区二区| 一本色道久久综合一区 | 亚洲免费视频观看| 欧美夜福利tv在线| 欧美精品麻豆| 国产伦精品一区二区三区免费| 亚洲日本欧美| 久久超碰97人人做人人爱| 亚洲电影免费观看高清| 中文欧美日韩| 欧美精品乱人伦久久久久久 | 欧美色精品在线视频| 国产伦精品免费视频| 日韩视频在线观看免费| 在线亚洲一区| 狠狠色综合网| 亚洲欧美成人网| 亚洲国产日韩精品| 久久成人国产| 一本色道久久综合| 免费久久99精品国产自在现线| 国产精品99久久久久久久久久久久 | 国产亚洲欧美日韩一区二区| 中日韩美女免费视频网址在线观看| 国产偷国产偷亚洲高清97cao | 欧美激情精品久久久久久| 欧美激情女人20p| 亚洲电影下载| 一本色道久久综合亚洲二区三区| 男女视频一区二区| 国产一区再线| 性色av一区二区三区红粉影视| 亚洲欧美影院| 欧美精品三级在线观看| 亚洲国产精品传媒在线观看| 亚洲色图在线视频| 欧美影院久久久| 亚洲国产黄色片| 一区二区三区**美女毛片| 欧美精品亚洲二区| 性欧美超级视频| 国产精品进线69影院| 一本到12不卡视频在线dvd| 在线欧美一区| 亚洲电影第三页| 一本一道久久综合狠狠老精东影业|