Android中的藍牙通信

一、藍牙簡介

現有的藍牙主要分爲兩類:

  • 經典藍牙:3.0版本以下的藍牙,都稱爲“經典藍牙”,功耗高、傳輸數據量大、傳輸距離只有10米。

  • 低功耗藍牙:4.0及以上版本的藍牙就是低功耗藍牙也叫BLE,低功耗,數據量小,距離50米左右。

Android4.3以上對這兩種藍牙都是支持的,不過經典藍牙和低功耗藍牙的API是不一樣的,如果用低功耗藍牙API的方法去連接經典藍牙設備,是連不上的。

藍牙小車上用的大部分是經典藍牙,所以我們這裏介紹經典藍牙API的使用。

二、經典藍牙通信流程及相關API

經典藍牙通信的流程是:發現設備->配對/綁定設備->建立連接->數據通信

經典藍牙通信涉及到的API主要有:

  • BluetoothAdapter主要負責藍牙的打開、關閉掃描。

  • BluetoothSocket主要負責藍牙的連接、讀寫數據。

接下來我們介紹具體的方法:

1.獲取BluetoothAdapter對象

使用BluetoothAdapter.getDefaultAdapter()方法即可以獲取該對象,

2.打開藍牙

判斷藍牙是否開啓: bluetoothAdapter.isEnabled()

打開藍牙的方式:

(1)異步自動開啓藍牙,調用bluetoothAdapter的enable方法,這種方法打開藍牙不會彈出提示,但是藍牙不會立即處於開啓狀態

(2)同步提示開啓藍牙,打開一個Intent:BluetoothAdapter.ACTION_REQUEST_ENABLE

3.掃描設備

開始掃描設備的方法:startDiscovery()

取消掃描設備的方法:cancelDiscovery()

掃描是在後臺進行的,需要利用廣播接收者接收掃描結果

掃描設備過程中,掃描開始、掃描結束、發現設備, 均會有相應的廣播發出

4.連接設備

可以通過設備地址連接藍牙,首先調用getRemoteDevice()方法獲取藍牙設備,然後調用device.createRfcommSocketToServiceRecord()方法獲取bluetoothSocket,在連接前需要調用cancelDiscovery()方法取消掃描,最後進行連接調用connect()方法進行連接

5.藍牙數據收發

收,即讀數據:

bytes = bluetoothSocket.getInputStream().read(buffer);

法,即寫數據:

bluetoothSocket.getOutputStream().write(buffer);

6.藍牙的操作權限

在AndroidManifest裏面添加權限

首先是使用藍牙的權限:

<uses-permission android:name="android.permission.BLUETOOTH" />

其次是藍牙設備管理的權限:

<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

三、具體實現

我們採用一個Button彈出藍牙設置的對話框,再用一個列表列出已綁定的藍牙設備,如果需要的藍牙設備不在列表中,則需要掃描設備。如果需要的藍牙設備已在列表中,則只需要點擊需要連接的藍牙設備即可。點擊設備後將進行藍牙連接,連接成功或失敗均會彈出提示。藍牙連接成功後就可以進行控制指令的收發了。

這裏我將藍牙相關操作放到了一個BluetoothUtils類中,另外藍牙掃描和已綁定設備用一個Activity進行呈現。在這個Activity中有個廣播接收者,用於接收掃描到的新設備和掃描結束的廣播,將新掃描到的設備添加到列表中。

需要發送的指令需要和單片機端進行配合,這裏需要查看小車控制手冊,或者小車的源碼,如果小車端收到“ONA”會前進,則安卓端也要發送“ONA”,小車收到後才能前進。

 

四、完整代碼

關注“Android硬開發”,回覆“藍牙小車”

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章