diff --git a/lib/data/services/ble_manager.dart b/lib/data/services/ble_manager.dart index 5d1af6ca3..25867c571 100644 --- a/lib/data/services/ble_manager.dart +++ b/lib/data/services/ble_manager.dart @@ -532,7 +532,7 @@ class BleManager extends GetxService { try { // 从.env文件直接读取环境变量 var serverurl = dotenv.env['SERVER_URL'] ?? ''; - if (Get.deviceLocale?.countryCode != 'CN') { + if (Get.locale?.countryCode != 'CN') { serverurl = dotenv.env['HW_SERVER_URL'] ?? ''; } @@ -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 feddfb18e..5cc66c30b 100644 --- a/lib/modules/pairing/controllers/pairing_controller.dart +++ b/lib/modules/pairing/controllers/pairing_controller.dart @@ -844,9 +844,11 @@ class PairingController extends GetxController with WidgetsBindingObserver { license: ''), ); if (existingDevice.id != -1) { + _bleManager.stopScan(); // 已经绑定 return 10; } else { + _bleManager.stopScan(); return 1; } } @@ -874,9 +876,11 @@ class PairingController extends GetxController with WidgetsBindingObserver { license: ''), ); if (existingDevice.id != -1) { + _bleManager.stopScan(); // 已经绑定 return 10; } else { + _bleManager.stopScan(); return 1; } } @@ -889,6 +893,7 @@ class PairingController extends GetxController with WidgetsBindingObserver { } await Future.delayed(Duration(seconds: 1)); } + _bleManager.stopScan(); if (product != null && product.devicetype == 2) { //ble设备 必须要扫描到结果 return 0; 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 cb8d6d962..9b6ee6307 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 @@ -307,27 +307,32 @@ object BleService { Log.i(TAG, "开始主动扫描BLE设备...") scanResults.clear() // Log.i(TAG, "liwei---------startScan 5") -// val filter = ScanFilter.Builder() -// // .setServiceUuid(ParcelUuid(BleConst.PRIMARY_SERVICE_UUID)) + val filter = ScanFilter.Builder() + // .setServiceUuid(ParcelUuid(BleConst.PRIMARY_SERVICE_UUID)) // .setManufacturerData(0xEFAB, byteArrayOf(0xA0.toByte(), 0x01)) -// .build() -// Log.i(TAG, "liwei---------startScan 6") -// val settings = ScanSettings.Builder() -// .setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY) -// // .setCallbackType(ScanSettings.CALLBACK_TYPE_FIRST_MATCH) -// .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 filters = uuids.map { uuidStr -> - ScanFilter.Builder() - .setServiceUuid(ParcelUuid(UUID.fromString(uuidStr))) - .build() - } + .build() +// val filters = uuids.mapNotNull { uuidStr -> +// try { +// // 清理UUID字符串,移除非十六进制字符 +// val cleanUuidStr = uuidStr.replace("[^0-9A-Fa-f]".toRegex(), "") +// +// // 验证清理后的字符串长度(应该是4位十六进制字符) +// if (cleanUuidStr.length != 4) { +// Log.w(TAG, "无效的UUID格式: $uuidStr,清理后: $cleanUuidStr,长度: ${cleanUuidStr.length}") +// return@mapNotNull null +// } +// +// val fullUuid = "0000$cleanUuidStr-0000-1000-8000-00805f9b34fb" +// Log.d(TAG, "扫描uuid: $fullUuid") +// +// ScanFilter.Builder() +// .setServiceUuid(ParcelUuid(UUID.fromString(fullUuid))) +// .build() +// } catch (e: IllegalArgumentException) { +// Log.e(TAG, "构造UUID失败: $uuidStr", e) +// null +// } +// } val settings = ScanSettings.Builder() .setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY) .setCallbackType(ScanSettings.CALLBACK_TYPE_ALL_MATCHES) // 推荐:不会触发权限问题 @@ -335,7 +340,7 @@ object BleService { .build() // Log.i(TAG, "liwei---------startScan 7") try { - scanner.startScan(filters, settings, scanCallback) + scanner.startScan(listOf(filter), settings, scanCallback) isScanning = true // Log.i(TAG, "liwei---------startScan 8") // 设置扫描超时 @@ -468,10 +473,10 @@ object BleService { val serviceUuids = scanRecord?.serviceUuids?.joinToString(", ") { it.uuid.toString() } ?: "无" -// Log.d( -// TAG, "liwei--------- 扫描到设备: 名称=${device.name ?: "未知"}, 地址=${device.address}, " + -// "RSSI=${result.rssi}, 服务UUID=[$serviceUuids]" - // ) + Log.d( + TAG, "liwei--------- 扫描到设备: 名称=${device.name ?: "未知"}, 地址=${device.address}, " + + "RSSI=${result.rssi}, 服务UUID=[$serviceUuids]" + ) val info = mutableMapOf( "name" to (device.name ?: "未知"), "address" to device.address