diff --git a/lib/blue/blue_manage.dart b/lib/blue/blue_manage.dart index 064fe984..cdc9ae3e 100755 --- a/lib/blue/blue_manage.dart +++ b/lib/blue/blue_manage.dart @@ -263,7 +263,7 @@ class BlueManage { for (final ScanResult scanResult in results) { if (scanResult.advertisementData.serviceUuids.isNotEmpty) { // AppLog.log( - // '扫描到的设备:${scanResult.advertisementData.serviceUuids[0].toString()}'); + // '扫描到的设备:${scanResult.advertisementData.serviceUuids[0].toString()}====${scanResult.advertisementData.advName}'); } else { continue; } @@ -316,20 +316,30 @@ class BlueManage { } /// 判断是否包含指定的uuid - bool _isMatch(List serviceUuids, - {DeviceType deviceType = DeviceType.blue}) { - // 获取设备类型数组 - List deviceTypeList = getDeviceType(deviceType); - - // 检查 serviceUuids 是否包含 deviceTypeList 中的任意一个值 - if (serviceUuids != null && serviceUuids.isNotEmpty) { - return serviceUuids.any((uuid) { - return deviceTypeList - .any((type) => uuid.toLowerCase().contains(type.toLowerCase())); - }); + bool _isMatch(List serviceUuids, {DeviceType deviceType = DeviceType.blue}) { + final List prefixes = getDeviceType(deviceType).map((e) => e.toLowerCase()).toList(); + for (String uuid in serviceUuids) { + final String cleanUuid = uuid.replaceAll('-', '').toLowerCase(); + if (cleanUuid.length == 8) { + // 8位,判断前两位 + for (final prefix in prefixes) { + if (cleanUuid.startsWith(prefix)) { + return true; + } + } + } else if (cleanUuid.length == 32) { + // 128位,判断前8位的第3、第4位 + final String first8 = cleanUuid.substring(0, 8); + if (first8.length >= 4) { + final String thirdAndFourth = first8.substring(2, 4); // 索引2和3 + for (final prefix in prefixes) { + if (thirdAndFourth == prefix) { + return true; + } + } + } + } } - - // 如果 serviceUuids 为空,则返回 false return false; } diff --git a/lib/blue/io_type.dart b/lib/blue/io_type.dart index ee785811..a5f523b4 100755 --- a/lib/blue/io_type.dart +++ b/lib/blue/io_type.dart @@ -9,7 +9,7 @@ List getDeviceType(DeviceType deviceType) { List t = ['758824']; switch (deviceType) { case DeviceType.blue: - t = ['758824', '75']; + t = ['758824', '75', '768824', '76']; break; case DeviceType.gateway: t = ['758825'];