Browse Source

上传uuid过滤

weicu
liwei1dao 1 year ago
parent
commit
f12933cc01
  1. 5
      lib/data/models/appconfig.dart
  2. 8
      lib/data/services/ble_manager.dart
  3. 5
      lib/modules/pairing/controllers/pairing_controller.dart
  4. 20
      local_plugins/ble_service/android/src/main/kotlin/com/yunqiinnovation/ble_service/BleService.kt
  5. 4
      local_plugins/ble_service/lib/ble_service.dart

5
lib/data/models/appconfig.dart

@ -42,6 +42,11 @@ class AppConfig {
return names;
}
static List<String> allproductUuids() {
List<String> uuids = config.products.map((user) => user.scanuuid).toList();
return uuids;
}
static DBProduct? getproduct(String name) {
final foundProduct =
config.products.firstWhere((product) => product.devicename == name);

8
lib/data/services/ble_manager.dart

@ -833,9 +833,9 @@ class BleManager extends GetxService {
}
/// 验证设备是否可以配对
Future<void> startScan(String devicename) async {
Future<void> startScan(List<String> 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<List<Map<String, String>>?> getDeviceList(String deviceName) async {
Future<List<Map<String, String>>?> getDeviceList(String devicename) async {
try {
final result = _bleService.getDeviceList(deviceName);
final result = _bleService.getDeviceList(devicename);
return result;
} catch (e) {
Logger.error('获取设备信息: ${e.toString()}');

5
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<Map<String, String>>? deviceinfos;

20
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<String>, 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")
// 设置扫描超时

4
local_plugins/ble_service/lib/ble_service.dart

@ -293,10 +293,10 @@ class BleService {
}
/// 断开连接
Future<bool> startScan(String devicename) async {
Future<bool> startScan(List<String> uuids) async {
try {
final result = await _methodChannel
.invokeMethod<bool>('startScan', {'devicename': devicename});
.invokeMethod<bool>('startScan', {'uuids': uuids});
return result ?? false;
} catch (e) {
print('开启扫描ble设备失败: $e');

Loading…
Cancel
Save