From 3c10caa5dd9ec2973a4788dbcf0433fb7cb04686 Mon Sep 17 00:00:00 2001 From: iAMD Date: Sat, 21 Oct 2023 14:04:22 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E5=AE=89=E5=8D=93?= =?UTF-8?q?=E5=B9=B3=E5=8F=B0=E7=94=B1=E4=BA=8E=E5=8D=8F=E5=95=86=20MTU=20?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5=E5=AF=BC=E8=87=B4=E5=8F=91=E7=8E=B0=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E6=8A=9B=E5=87=BA=E5=BC=82=E5=B8=B8=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98=20#22=20(#23)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bluetooth_low_energy/CHANGELOG.md | 4 ++++ bluetooth_low_energy/example/pubspec.lock | 14 +++++++++--- bluetooth_low_energy/pubspec.yaml | 4 ++-- bluetooth_low_energy_android/CHANGELOG.md | 4 ++++ .../example/pubspec.lock | 10 ++++++++- .../lib/src/my_central_manager.dart | 22 +++++++++++++------ bluetooth_low_energy_android/pubspec.yaml | 3 ++- 7 files changed, 47 insertions(+), 14 deletions(-) diff --git a/bluetooth_low_energy/CHANGELOG.md b/bluetooth_low_energy/CHANGELOG.md index 13dcd2f..158649f 100644 --- a/bluetooth_low_energy/CHANGELOG.md +++ b/bluetooth_low_energy/CHANGELOG.md @@ -1,3 +1,7 @@ +## 3.0.3 + +* `Android` Fix the issue [android device: requestMtu issue #22](https://github.com/yanshouwang/bluetooth_low_energy/issues/22) + ## 3.0.2 * `Android` `iOS` Fix the issue that `getMaximumWriteLength` is wrong and coerce the value from 20 to 512. diff --git a/bluetooth_low_energy/example/pubspec.lock b/bluetooth_low_energy/example/pubspec.lock index 40e7f8e..bb89c2d 100644 --- a/bluetooth_low_energy/example/pubspec.lock +++ b/bluetooth_low_energy/example/pubspec.lock @@ -23,15 +23,15 @@ packages: path: ".." relative: true source: path - version: "3.0.2" + version: "3.0.3" bluetooth_low_energy_android: dependency: transitive description: name: bluetooth_low_energy_android - sha256: "0fa5c4625ac01b6d4bbf78b10d0389d8e9907ae7c3fbc9601b481ddd4eaa86b6" + sha256: "86e10541532c96607a0525edba1fd75516543e9beac2e391ac8a50c467aebf88" url: "https://pub.dev" source: hosted - version: "3.0.3" + version: "3.0.4" bluetooth_low_energy_darwin: dependency: transitive description: @@ -193,6 +193,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.1" + logging: + dependency: transitive + description: + name: logging + sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340" + url: "https://pub.dev" + source: hosted + version: "1.2.0" matcher: dependency: transitive description: diff --git a/bluetooth_low_energy/pubspec.yaml b/bluetooth_low_energy/pubspec.yaml index dba31de..f185a88 100644 --- a/bluetooth_low_energy/pubspec.yaml +++ b/bluetooth_low_energy/pubspec.yaml @@ -1,6 +1,6 @@ name: bluetooth_low_energy description: A Flutter plugin for controlling the bluetooth low energy. -version: 3.0.2 +version: 3.0.3 homepage: https://github.com/yanshouwang/bluetooth_low_energy environment: @@ -11,7 +11,7 @@ dependencies: flutter: sdk: flutter bluetooth_low_energy_platform_interface: ^3.0.0 - bluetooth_low_energy_android: ^3.0.3 + bluetooth_low_energy_android: ^3.0.4 bluetooth_low_energy_darwin: ^3.0.2 bluetooth_low_energy_linux: ^3.0.0 diff --git a/bluetooth_low_energy_android/CHANGELOG.md b/bluetooth_low_energy_android/CHANGELOG.md index d684a6e..9ed4ba1 100644 --- a/bluetooth_low_energy_android/CHANGELOG.md +++ b/bluetooth_low_energy_android/CHANGELOG.md @@ -1,3 +1,7 @@ +## 3.0.4 + +* Fix the issue [android device: requestMtu issue #22](https://github.com/yanshouwang/bluetooth_low_energy/issues/22) + ## 3.0.3 * Fix the issue that `getMaximumWriteLength` is wrong and coerce the value from 20 to 512. diff --git a/bluetooth_low_energy_android/example/pubspec.lock b/bluetooth_low_energy_android/example/pubspec.lock index de7650b..d5217ff 100644 --- a/bluetooth_low_energy_android/example/pubspec.lock +++ b/bluetooth_low_energy_android/example/pubspec.lock @@ -15,7 +15,7 @@ packages: path: ".." relative: true source: path - version: "3.0.3" + version: "3.0.4" bluetooth_low_energy_platform_interface: dependency: "direct main" description: @@ -137,6 +137,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.1" + logging: + dependency: transitive + description: + name: logging + sha256: "623a88c9594aa774443aa3eb2d41807a48486b5613e67599fb4c41c0ad47c340" + url: "https://pub.dev" + source: hosted + version: "1.2.0" matcher: dependency: transitive description: diff --git a/bluetooth_low_energy_android/lib/src/my_central_manager.dart b/bluetooth_low_energy_android/lib/src/my_central_manager.dart index 1eca696..394502e 100644 --- a/bluetooth_low_energy_android/lib/src/my_central_manager.dart +++ b/bluetooth_low_energy_android/lib/src/my_central_manager.dart @@ -2,6 +2,7 @@ import 'dart:async'; import 'dart:typed_data'; import 'package:bluetooth_low_energy_platform_interface/bluetooth_low_energy_platform_interface.dart'; +import 'package:logging/logging.dart'; import 'my_api.dart'; import 'my_bluetooth_low_energy_manager.dart'; @@ -10,6 +11,7 @@ import 'my_gatt_descriptor2.dart'; class MyCentralManager extends MyBluetoothLowEnergyManager implements CentralManager, MyCentralManagerFlutterApi { + final Logger _logger; final MyCentralManagerHostApi _api; final StreamController _discoveredController; final StreamController @@ -18,7 +20,8 @@ class MyCentralManager extends MyBluetoothLowEnergyManager _characteristicValueChangedController; MyCentralManager() - : _api = MyCentralManagerHostApi(), + : _logger = Logger('MyCentralManager'), + _api = MyCentralManagerHostApi(), _discoveredController = StreamController.broadcast(), _peripheralStateChangedController = StreamController.broadcast(), _characteristicValueChangedController = StreamController.broadcast(); @@ -100,12 +103,6 @@ class MyCentralManager extends MyBluetoothLowEnergyManager } final peripheralHashCodeArgs = peripheral.hashCode; final servicesArgs = await _api.discoverGATT(peripheralHashCodeArgs); - // 部分外围设备连接后会触发 onMtuChanged 回调,若在此之前调用协商 MTU 的方法,会在协商完成前返回, - // 此时如果继续调用其他方法(如发现服务)会导致回调无法触发, - // 因此为避免此情况发生,需要延迟到发现服务完成后再协商 MTU。 - // TODO: 思考更好的解决方式,可以在连接后立即协商 MTU。 - const mtuArgs = 517; - await _api.requestMTU(peripheralHashCodeArgs, mtuArgs); final services = servicesArgs .cast() .map((args) => args.toService2()) @@ -119,6 +116,17 @@ class MyCentralManager extends MyBluetoothLowEnergyManager } service.peripheral = peripheral; } + try { + // 部分外围设备连接后会触发 onMtuChanged 回调,若在此之前调用协商 MTU 的方法,会在协商完成前返回, + // 此时如果继续调用其他方法(如发现服务)会导致回调无法触发, + // 因此为避免此情况发生,需要延迟到发现服务完成后再协商 MTU。 + // TODO: 思考更好的解决方式,可以在连接后立即协商 MTU。 + const mtuArgs = 517; + await _api.requestMTU(peripheralHashCodeArgs, mtuArgs); + } catch (error, stack) { + // 忽略协商 MTU 错误 + _logger.warning('requst MTU failed.', error, stack); + } return services; } diff --git a/bluetooth_low_energy_android/pubspec.yaml b/bluetooth_low_energy_android/pubspec.yaml index ee7c539..91cd501 100644 --- a/bluetooth_low_energy_android/pubspec.yaml +++ b/bluetooth_low_energy_android/pubspec.yaml @@ -1,6 +1,6 @@ name: bluetooth_low_energy_android description: Android implementation of the bluetooth_low_energy plugin. -version: 3.0.3 +version: 3.0.4 homepage: https://github.com/yanshouwang/bluetooth_low_energy environment: @@ -11,6 +11,7 @@ dependencies: flutter: sdk: flutter bluetooth_low_energy_platform_interface: ^3.0.0 + logging: ^1.2.0 dev_dependencies: flutter_test: