Flutter版低功耗蓝牙插件,支持Android和iOS。
FlutterBlePlugin 基于flutter_blue做功能修改和稳定性修复。在避免API改动所带来的业务修改负担的前提下,对原有功能进行调整,以及新功能的开发,主要改动为:
-
Android native code重构
-
增加读取Rssi功能
-
device.connect
方法增加retry的设置参数 -
针对部分Android机型,HID模式下blutooth LE设备
connect
方法带来的连接问题进行修改 -
native
scan & connect
增加权限判断 -
增加
scan
,connect
状态类型 -
修复MacOS M1芯片在
java protobuf
库上带来的编译问题 -
修复iOS native
getConnectedDevices
的异常问题 -
修复蓝牙模块主动断开蓝牙导致的连接问题
defaultConfig {
minSdkVersion 21
}
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<application
<dict>
<key>NSBluetoothAlwaysUsageDescription</key>
<string>Need BLE permission</string>
<key>NSBluetoothPeripheralUsageDescription</key>
<string>Need BLE permission</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Need Location permission</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>Need Location permission</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>Need Location permission</string>
FlutterBle _flutterBlePlugin = FlutterBle();
List<ScanResult> r = _flutterBlePlugin.startScan()// 返回类型是一个list
Stream r =_flutterBlePlugin.scan({
List<Guid> services = const [], //service filter collection
Duration? timeout,
bool allowDuplicates = false, // allow duplicate results when scan
}) // 返回类型是Stream
device.connect() // device -> BluetoothDevice
/// connect 参数,默认重连一次
Future<void> connect({
Duration? timeout,
bool autoConnect = false,
int reconnectCount = 1,
})
device.disconnect() // device -> BluetoothDevice
await device.connect(); // device -> BluetoothDevice
device.state.listen(...); //在connect方法之后监听,可以避免收到默认值
device.discoverServices();
ScanResult.advertisementData;
device.getDeviceRssi();
// Reads all characteristics
var characteristics = service.characteristics;
for(BluetoothCharacteristic c in characteristics) {
List<int> value = await c.read();
print(value);
}
// Writes to a characteristic
await c.write([0x12, 0x34])
await characteristic.setNotifyValue(true);
characteristic.value.listen((value) {
// do something with new value
});
///android only
final mtu = await device.mtu.first;
await device.requestMtu(512);
_flutterBlePlugin.state.listen()