藍牙低能耗(Bluetooth Low Energy,或稱Bluetooth LE、BLE,舊商標Bluetooth Smart)也稱低功耗藍牙,是藍牙技術聯盟設計和銷售的一種個人局域網技術,旨在用於醫療保健、運動健身、信標、安防、家庭娛樂等領域的新興應用。相較經典藍牙,低功耗藍牙旨在保持同等通信範圍的同時顯著降低功耗和成本。
筆者前段時間做了一個功能,需要對接一個藍牙設備,該藍牙設備使用的就是BLE藍牙。這裏給大家分享一下我的實現。這篇文章主要是實現程序與BLE藍牙設備的連接,交互和設置、測試工具等請期待下一篇文章。
如何獲取附近的藍牙設備列表:
/**
* 開始掃描 藍牙設備
*/
fun scanBle() {
var intent=Intent(RulerService.CONNECTING)
activity.sendBroadcast(intent)
val bluetoothAdapter = BluetoothAdapter.getDefaultAdapter()
if (bluetoothAdapter == null) {//沒有藍牙驅動
var intent=Intent(RulerService.FAILURE)
intent.putExtra("data","本機沒有找到藍牙硬件或驅動!")
activity.sendBroadcast(intent)
return
} else {
if (!bluetoothAdapter.isEnabled) {//藍牙沒有開啓
//直接開啓藍牙
bluetoothAdapter.enable()
reConnect()
}else{//藍牙正常,開始掃描
bluetoothLeScanner = bluetoothAdapter.bluetoothLeScanner
// Android5.0新增的掃描API,掃描返回的結果更友好,比如BLE廣播數據以前是byte[] scanRecord,而新API幫我們解析成ScanRecord類
bluetoothLeScanner.startScan(mScanCallback)
Thread(Runnable {
Thread.sleep(5000)
bluetoothLeScanner.stopScan(mScanCallback) //停止掃描
if (!isSearchDev) {
var intent=Intent(RulerService.FAILURE)
intent.putExtra("data","未能識別到靠尺設備")
activity.sendBroadcast(intent)
}
}).start()
}
}
}
BluetoothAdapter
是Android爲我們準備好的藍牙對接類,在設備有藍牙驅動和硬件的情況下,就會有值。我們首先利用它去檢測設備是否有藍牙驅動,設備藍牙是否打開等信息,並優化用戶體驗。滿足以上條件後,我們可以開始掃描附近的藍牙設備。核心代碼:
bluetoothLeScanner = bluetoothAdapter.bluetoothLeScanner
bluetoothLeScanner.startScan(mScanCallback)
在源碼中,筆者做了一個查詢5秒,未能查詢到指定藍牙設備時,停職掃描並且發送查詢失敗廣播的線程。如果你是想獲取全部列表,可以自行修改。
mScanCallback是我們的結果返回類,開始掃描和停止掃描都需要用到它。
private val mScanCallback = @RequiresApi(Build.VERSION_CODES.LOLLIPOP)
object : ScanCallback() {
// 掃描Callback
@RequiresApi(Build.VERSION_CODES.LOLLIPOP)
override fun onScanResult(callbackType: Int, result: ScanResult) {
val dev = BleDev(result.device, result)
Log.i("wsy",dev.dev.name?:"")
if (dev.dev.name == RulerService.DEVNAME) {
rulerService.putExtra("dev", dev.dev)
activity.startService(rulerService)
isSearchDev=true
bluetoothLeScanner.stopScan(this) //停止掃描
}
}
}
callback中會在藍牙掃描開啓後,持續的返回查詢到的藍牙設備信息,由於筆者只需要連接特定名字的指定藍牙設備,所以用名字做了判斷,成功查詢到時,關閉藍牙掃描並且將設備信息發送到筆者創建的藍牙交互服務中,這個會在下篇文章講到。
到此,我們就獲取到了附近所有的使用BLE藍牙的設備的設備信息。至於如何交互?如何篩選BLE藍牙設備的指定權限服務?筆者會在下篇一一道來,並且會上傳一個筆者做的藍牙測試工具。感謝閱讀
End
筆者的Github Blog,希望各位大大提意見,點個star,謝謝
傳送門:WusyBlog求互粉互贊,互贊所有文章可以私聊我。哈哈,希望我們的原創文章能讓更多朋友看到,一起變強。
筆者新開通了微信公衆號——飲水思源|wusy 計劃持續運營,每日爲您分享Android乾貨、原創文章。微信掃描下方的二維碼關注我,開發學習路上不迷路。謝謝各位