flutter之玩轉藍芽外掛flutter_blue 0.6.0+1-第一篇

misen發表於2019-07-19

介紹

FlutterBlue是一款flutter對藍芽外掛,旨在提供來自兩個平臺(iOS和Android)的最大功能。 使用FlutterBlue例項,您可以掃描並連線到附近的裝置(BluetoothDevice)。一旦連線到裝置,BluetoothDevice物件就可以發現服務(BluetoothService),特徵(BluetoothCharacteristic)和描述符(BluetoothDescriptor)。然後,BluetoothDevice物件用於直接與特徵和描述符互動。

基本用法

生成例項

FlutterBlue flutterBlue = FlutterBlue.instance;
複製程式碼

掃描裝置操作

/// 使用例項方法scan(),並使用listen()監聽,scanResult做引數
var scanSubscription = flutterBlue.scan().listen((scanResult) {
    // do something with scan result
    device = scanResult.device;
    print('${device.name} found! rssi: ${scanResult.rssi}');
});

/// 關閉掃描操作,避免記憶體洩漏
scanSubscription.cancel();
複製程式碼

連線裝置

/// Connect to the device 這是一個非同步操作
await device.connect();

/// Disconnect from device
device.disconnect();
複製程式碼

搜尋裝置

    //非同步搜尋方法,返回BluetoothService對列表
List<BluetoothService> services = await device.discoverServices();
    //遍歷藍芽裝置對列表
services.forEach((service) {
    // do something with service
});
複製程式碼

讀寫特徵值characteristics

   相信有些小夥伴不太瞭解characteristics是幹什麼用的,BLE的基本關係是:
一個藍芽4.0的終端device可以包含多個Service,
一個Service可以包含多個Characteristic,一個Characteristic包含一個Value和多個Descriptor,
一個Descriptor包含一個Value。
簡單的說藍芽裝置正是透過Characteristic來進行裝置間的互動的(如讀、寫、訂閱等操作),
詳細介紹可以參考 [https://www.jianshu.com/p/d991f0fdec63]
複製程式碼
// 透過裝置讀取所有特徵值characteristics,返回列表
var characteristics = service.characteristics;
for(BluetoothCharacteristic c in characteristics) {
    List<int> value = await c.read();
    print(value);
}

// 非同步方法,向一個特徵值characteristic寫入資料
await c.write([0x12, 0x34])
複製程式碼

讀寫描述符descriptors

// 透過特徵值讀取所有描述符descriptors,返回列表
var descriptors = characteristic.descriptors;
for(BluetoothDescriptor d in descriptors) {
    List<int> value = await d.read();
    print(value);
}

// 非同步方法,向一個特徵值descriptors寫入資料
await d.write([0x12, 0x34])
複製程式碼

設定通知和監聽特徵值characterisic的value變化

await characteristic.setNotifyValue(true);
characteristic.value.listen((value) {
    // do something with new value
});
複製程式碼

常用API

FlutterBlue API

Android iOS Description
scan :white_check_mark: :white_check_mark: 開始藍芽低功耗裝置的掃描
state :white_check_mark: :white_check_mark: 獲取藍芽介面卡的當前狀態
onStateChanged :white_check_mark: :white_check_mark: 藍芽介面卡的狀態變化流

BluetoothDevice API

Android iOS Description
connect :white_check_mark: :white_check_mark: 建立裝置連線
disconnect :white_check_mark: :white_check_mark: 取消一個啟用active的或者掛起pending的裝置device連線
discoverServices :white_check_mark: :white_check_mark: 透過提供的遠端裝置device儘可能的搜尋服務services,及它的特徵值characteristics和描述符descriptors
services :white_check_mark: :white_check_mark: 獲取裝置device列表,要求discoverServices()已經執行完成.
state :white_check_mark: :white_check_mark: 獲取裝置的當前狀態.
onStateChanged :white_check_mark: :white_check_mark: 監聽裝置狀態改變的回撥

BluetoothCharacteristic API

Android iOS Description
read :white_check_mark: :white_check_mark: 檢索特徵值characteristic的value
write :white_check_mark: :white_check_mark: 寫入修改特徵值characteristic的value.
setNotifyValue :white_check_mark: :white_check_mark: 設定特徵值characteristic的通知和指示.
value :white_check_mark: :white_check_mark: 當發生改變時,特徵值characteristic的value流.

BluetoothDescriptor API

Android iOS Description
read :white_check_mark: :white_check_mark: 檢索描述符descriptor的value.
write :white_check_mark: :white_check_mark: 寫入修改描述符descriptor的value.

相關文章