標籤:
一:Bluetooth包簡介
Android平台提供了一個android.bluetooth的包,裡面實現藍牙裝置之間通訊的藍芽API。總共有8個類,常用的四個類如下:
BluetoothAdapter類
代表了一個本地的藍芽適配器。它是所有藍芽互動的進入點。利用它你可以發現其他藍牙裝置,查詢繫結了的裝置,使用已知的MAC地址執行個體化一個藍牙裝置和建立一個BluetoothServerSocket(作為伺服器端)來監聽來自其他裝置的串連。
BluetoothDevice類
代表了一個遠端的藍牙裝置,使用它請求遠端藍牙裝置串連或者擷取遠端藍牙裝置的名稱、地址、種類和綁定狀態(其資訊是封裝在BluetoothSocket中)。
BluetoothSocket類
代表了一個藍芽通訊端的介面(類似於TCP中的通訊端),它是應用程式通過輸入、輸出資料流與其他藍牙裝置通訊的連接點。
BlueboothServerSocket類
代表開啟服務串連來監聽可能到來的串連請求(屬於server端),為了串連兩個藍牙裝置必須有一個裝置作為伺服器開啟一個服務通訊端。當遠端裝置發起串連串連請求的時候,並且已經串連到了的時候,BlueboothServerSocket類將會返回一個BluetoothSocket。
二:常用類的使用
BluetoothAdapter:藍芽適配器
cancelDiscovery()取消探索,當我們正在搜尋裝置的時候調用這個方法將不再繼續搜尋disable()關閉藍芽enable()開啟藍芽,這個方法開啟藍芽不會彈出提示,更多的時候我們需要問下使用者是否開啟,以下兩行代碼同樣是開啟藍芽,但會提示使用者: Intentenabler = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivity(enabler);getAddress()擷取本地藍芽地址getDefaultAdapter()擷取預設BluetoothAdapter,實際上,也只有這一種方法擷取BluetoothAdaptergetName()擷取本地藍芽名稱getRemoteDevice(String address)根據藍芽地址擷取遠程藍牙裝置getState()擷取本地藍芽適配器目前狀態isDiscovering()判斷當前是否正在尋找裝置,是則返回trueisEnabled()判斷藍芽是否開啟,已開啟返回true,否則返回falselistenUsingRfcommWithServiceRecord(String name,UUID uuid)根據名稱,UUID建立並返回BluetoothServerSocket,這是建立BluetoothSocket伺服器端的第一步startDiscovery()開始搜尋,這是搜尋的第一步
BluetoothDevice:遠程藍牙裝置
createRfcommSocketToServiceRecord(UUIDuuid)根據UUID建立並返回一個BluetoothSocket,這個方法也是我們擷取BluetoothDevice的目的——建立BluetoothSocket這個類其他的方法,如getAddress()、getName()等,同BluetoothAdapter。
BluetoothSocket:用戶端
//這個類一共有6個方法close()關閉connect()串連isConnected()判斷是否串連getInptuStream()擷取輸入資料流getOutputStream()擷取輸出資料流getRemoteDevice()擷取BluetoothSocket指定串連的遠程藍牙裝置
BluetoothServerSocket:服務端
//這個類一共有4個方法accept()accept(int timeout)close()關閉getChannel()返回這個通訊端綁定的通道
兩者的區別在於後面的方法指定了過時時間,需要注意的是,執行這兩個方法的時候,直到接收到了用戶端的請求(或是到期之後),都會阻塞線程,應該放在新線程裡運行。還有一點需要注意的是,這兩個方法都返回一個BluetoothSocket,最後的串連也是伺服器端與用戶端的兩個BluetoothSocket的串連
三:資料轉送
藍芽資料轉送——伺服器端
1、獲得BluetoothAdapter。
2、通過BluetoothAdapter.listenUsingRfcommWithServiceRecord(name,UUID uuid)方法建立BluetoothServerSocket對象。
3、通過luetoothServerSocket.accept()方法返回一個BluetoothSocket對象。由於該方法處於阻塞狀態,需要開啟線程來處理。
4、通過BluetoothSocket.getInputStream()和BluetoothSocket.getOutputStream()方法獲得讀寫資料的InputStream和OutputStream對象。
5、通過InputStream.read()方法來讀資料。通過OutputStream.write()方法來寫資料。
藍芽資料轉送——用戶端
1、獲得BluetoothAdapter。
2、通過BluetoothAdapter.getRemoteDevice(String address)獲得指定地址的BluetoothDevice對象。
3、通過BluetoothDevice.createRfcommSocketToServiceRecord (UUID uuid)方法建立BluetoothSocket對象。
4、通過BluetoothSocket.connect()方法來串連藍牙裝置。
5、通過BluetoothSocket.getInputStream()和BluetoothSocket.getOutputStream()方法獲得讀寫資料的InputStream和OutputStream對象。
6、通過InputStream.read()方法來讀資料。通過OutputStream.write()方法來寫資料。
四:Tip
UUID
// UUID:通用唯一識別碼,格式為:8-4-4-4-12// 兩個藍牙裝置進行串連需要使用同一個UUID
藍芽使用需添加的許可權
<uses-permissionandroid:name="android.permission.BLUETOOTH_ADMIN" /><uses-permissionandroid:name="android.permission.BLUETOOTH" />
Android藍芽技術Bluetooth初體驗