Skip to content

isaacyan17/FlutterBlePlugin

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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

 
 
 

Contributors