diff --git a/lib/data/models/appconfig.dart b/lib/data/models/appconfig.dart index 22a09d84a..1d1b844ab 100644 --- a/lib/data/models/appconfig.dart +++ b/lib/data/models/appconfig.dart @@ -42,6 +42,11 @@ class AppConfig { return names; } + static List allproductUuids() { + List uuids = config.products.map((user) => user.scanuuid).toList(); + return uuids; + } + static DBProduct? getproduct(String name) { final foundProduct = config.products.firstWhere((product) => product.devicename == name); diff --git a/lib/data/services/ble_manager.dart b/lib/data/services/ble_manager.dart index b9f48be6e..8708ed994 100644 --- a/lib/data/services/ble_manager.dart +++ b/lib/data/services/ble_manager.dart @@ -833,9 +833,9 @@ class BleManager extends GetxService { } /// 验证设备是否可以配对 - Future startScan(String devicename) async { + Future startScan(List uuids) async { try { - await _bleService.startScan(devicename); + await _bleService.startScan(uuids); } catch (e) { Logger.error('开始扫描设备: ${e.toString()}'); } @@ -860,9 +860,9 @@ class BleManager extends GetxService { } } - Future>?> getDeviceList(String deviceName) async { + Future>?> getDeviceList(String devicename) async { try { - final result = _bleService.getDeviceList(deviceName); + final result = _bleService.getDeviceList(devicename); return result; } catch (e) { Logger.error('获取设备信息: ${e.toString()}'); diff --git a/lib/modules/pairing/controllers/pairing_controller.dart b/lib/modules/pairing/controllers/pairing_controller.dart index f2783f4bb..feddfb18e 100644 --- a/lib/modules/pairing/controllers/pairing_controller.dart +++ b/lib/modules/pairing/controllers/pairing_controller.dart @@ -735,6 +735,7 @@ class PairingController extends GetxController with WidgetsBindingObserver { } final currentBleState = await _bleManager.getConnectionState(); final names = AppConfig.allproductNames(); + final uuids = AppConfig.allproductUuids(); // 检查是否已有绑定的设备 print("device.address${device.address}"); if (User.instance.devices.isNotEmpty) { @@ -791,13 +792,13 @@ class PairingController extends GetxController with WidgetsBindingObserver { } } print( - '获取到 deviceName: $deviceName address: ${device.address} names:$names'); + '获取到 deviceName: $deviceName address: ${device.address} uuids:$uuids'); if (names.contains(deviceName)) { if (currentBleState == 2) { //已连接直接返回 return 9; } - await _bleManager.startScan(deviceName); + await _bleManager.startScan(uuids); await Future.delayed(const Duration(seconds: 1)); // 尝试最多读取 3 次设备信息,每次间隔 1 秒 List>? deviceinfos; diff --git a/local_plugins/ble_service/android/src/main/kotlin/com/yunqiinnovation/ble_service/BleService.kt b/local_plugins/ble_service/android/src/main/kotlin/com/yunqiinnovation/ble_service/BleService.kt index bae9549ef..cb8d6d962 100644 --- a/local_plugins/ble_service/android/src/main/kotlin/com/yunqiinnovation/ble_service/BleService.kt +++ b/local_plugins/ble_service/android/src/main/kotlin/com/yunqiinnovation/ble_service/BleService.kt @@ -285,7 +285,7 @@ object BleService { * @param timeout 扫描超时时间(毫秒) * @return 是否成功开始扫描 */ - fun startScan(deviceName: String, timeout: Long = 15000): Boolean { + fun startScan(uuids: List, timeout: Long = 15000): Boolean { // Log.i(TAG, "liwei---------startScan 1 $deviceName") if (!isInitialized) { Log.e(TAG, "BLE服务未初始化") @@ -318,12 +318,16 @@ object BleService { // .setCallbackType(ScanSettings.CALLBACK_TYPE_FIRST_MATCH) // 使用ALL_MATCHES获取所有结果 // .setReportDelay(0) // 立即报告结果 // .build() - val filter = ScanFilter.Builder() - // 建议用 Service UUID 或 Device Name 替代 Manufacturer Data - // .setServiceUuid(ParcelUuid(BleConst.PRIMARY_SERVICE_UUID)) -// .setDeviceName(deviceName) // 更通用、更安全 - .build() - +// val filter = ScanFilter.Builder() +// // 建议用 Service UUID 或 Device Name 替代 Manufacturer Data +// // .setServiceUuid(ParcelUuid(BleConst.PRIMARY_SERVICE_UUID)) +//// .setDeviceName(deviceName) // 更通用、更安全 +// .build() + val filters = uuids.map { uuidStr -> + ScanFilter.Builder() + .setServiceUuid(ParcelUuid(UUID.fromString(uuidStr))) + .build() + } val settings = ScanSettings.Builder() .setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY) .setCallbackType(ScanSettings.CALLBACK_TYPE_ALL_MATCHES) // 推荐:不会触发权限问题 @@ -331,7 +335,7 @@ object BleService { .build() // Log.i(TAG, "liwei---------startScan 7") try { - scanner.startScan(listOf(filter), settings, scanCallback) + scanner.startScan(filters, settings, scanCallback) isScanning = true // Log.i(TAG, "liwei---------startScan 8") // 设置扫描超时 diff --git a/local_plugins/ble_service/lib/ble_service.dart b/local_plugins/ble_service/lib/ble_service.dart index 7e5a21ffd..1331ab839 100644 --- a/local_plugins/ble_service/lib/ble_service.dart +++ b/local_plugins/ble_service/lib/ble_service.dart @@ -293,10 +293,10 @@ class BleService { } /// 断开连接 - Future startScan(String devicename) async { + Future startScan(List uuids) async { try { final result = await _methodChannel - .invokeMethod('startScan', {'devicename': devicename}); + .invokeMethod('startScan', {'uuids': uuids}); return result ?? false; } catch (e) { print('开启扫描ble设备失败: $e');