Skip to content

Flutter plugin for communicate with Bluetooth Low Energy devices, support for Android and iOS

License

Notifications You must be signed in to change notification settings

isaacyan17/FlutterBlePlugin

Repository files navigation

FlutterBlePlugin

Flutter版低功耗蓝牙插件,支持Android和iOS。

Introduction

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的异常问题

  • 修复蓝牙模块主动断开蓝牙导致的连接问题

Setup

Android

Android最低编译版本为21

    defaultConfig {
        minSdkVersion 21
    }

android/app/src/main/AndroidManifest.xml设置蓝牙权限

	 <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

iOS

ios/Runner/Info.plist添加权限声明

	<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>

Usage

实例化插件

FlutterBle _flutterBlePlugin = FlutterBle();

搜索LE设备

  
    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;

读取Rssi

   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
});

读写MTU

///android only
final mtu = await device.mtu.first;
await device.requestMtu(512);

蓝牙开关监听

_flutterBlePlugin.state.listen()

Maintain Plan

后续计划

About

Flutter plugin for communicate with Bluetooth Low Energy devices, support for Android and iOS

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published