一、藍牙簡介
現有的藍牙主要分為兩類:
-
經典藍牙: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硬開發”,回復“藍牙小車”
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/252021.html
標籤:其他
