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; return names;
} }
static List<String> allproductUuids() {
List<String> uuids = config.products.map((user) => user.scanuuid).toList();
return uuids;
}
static DBProduct? getproduct(String name) { static DBProduct? getproduct(String name) {
final foundProduct = final foundProduct =
config.products.firstWhere((product) => product.devicename == name); 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 { try {
await _bleService.startScan(devicename); await _bleService.startScan(uuids);
} catch (e) { } catch (e) {
Logger.error('开始扫描设备: ${e.toString()}'); 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 { try {
final result = _bleService.getDeviceList(deviceName); final result = _bleService.getDeviceList(devicename);
return result; return result;
} catch (e) { } catch (e) {
Logger.error('获取设备信息: ${e.toString()}'); 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 currentBleState = await _bleManager.getConnectionState();
final names = AppConfig.allproductNames(); final names = AppConfig.allproductNames();
final uuids = AppConfig.allproductUuids();
// 检查是否已有绑定的设备 // 检查是否已有绑定的设备
print("device.address${device.address}"); print("device.address${device.address}");
if (User.instance.devices.isNotEmpty) { if (User.instance.devices.isNotEmpty) {
@ -791,13 +792,13 @@ class PairingController extends GetxController with WidgetsBindingObserver {
} }
} }
print( print(
'获取到 deviceName: $deviceName address: ${device.address} names:$names'); '获取到 deviceName: $deviceName address: ${device.address} uuids:$uuids');
if (names.contains(deviceName)) { if (names.contains(deviceName)) {
if (currentBleState == 2) { if (currentBleState == 2) {
//已连接直接返回 //已连接直接返回
return 9; return 9;
} }
await _bleManager.startScan(deviceName); await _bleManager.startScan(uuids);
await Future.delayed(const Duration(seconds: 1)); await Future.delayed(const Duration(seconds: 1));
// 尝试最多读取 3 次设备信息,每次间隔 1 秒 // 尝试最多读取 3 次设备信息,每次间隔 1 秒
List<Map<String, String>>? deviceinfos; 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 扫描超时时间(毫秒) * @param timeout 扫描超时时间(毫秒)
* @return 是否成功开始扫描 * @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") // Log.i(TAG, "liwei---------startScan 1 $deviceName")
if (!isInitialized) { if (!isInitialized) {
Log.e(TAG, "BLE服务未初始化") Log.e(TAG, "BLE服务未初始化")
@ -318,12 +318,16 @@ object BleService {
// .setCallbackType(ScanSettings.CALLBACK_TYPE_FIRST_MATCH) // 使用ALL_MATCHES获取所有结果 // .setCallbackType(ScanSettings.CALLBACK_TYPE_FIRST_MATCH) // 使用ALL_MATCHES获取所有结果
// .setReportDelay(0) // 立即报告结果 // .setReportDelay(0) // 立即报告结果
// .build() // .build()
val filter = ScanFilter.Builder() // val filter = ScanFilter.Builder()
// 建议用 Service UUID 或 Device Name 替代 Manufacturer Data // // 建议用 Service UUID 或 Device Name 替代 Manufacturer Data
// .setServiceUuid(ParcelUuid(BleConst.PRIMARY_SERVICE_UUID)) // // .setServiceUuid(ParcelUuid(BleConst.PRIMARY_SERVICE_UUID))
// .setDeviceName(deviceName) // 更通用、更安全 //// .setDeviceName(deviceName) // 更通用、更安全
.build() // .build()
val filters = uuids.map { uuidStr ->
ScanFilter.Builder()
.setServiceUuid(ParcelUuid(UUID.fromString(uuidStr)))
.build()
}
val settings = ScanSettings.Builder() val settings = ScanSettings.Builder()
.setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY) .setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
.setCallbackType(ScanSettings.CALLBACK_TYPE_ALL_MATCHES) // 推荐:不会触发权限问题 .setCallbackType(ScanSettings.CALLBACK_TYPE_ALL_MATCHES) // 推荐:不会触发权限问题
@ -331,7 +335,7 @@ object BleService {
.build() .build()
// Log.i(TAG, "liwei---------startScan 7") // Log.i(TAG, "liwei---------startScan 7")
try { try {
scanner.startScan(listOf(filter), settings, scanCallback) scanner.startScan(filters, settings, scanCallback)
isScanning = true isScanning = true
// Log.i(TAG, "liwei---------startScan 8") // 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 { try {
final result = await _methodChannel final result = await _methodChannel
.invokeMethod<bool>('startScan', {'devicename': devicename}); .invokeMethod<bool>('startScan', {'uuids': uuids});
return result ?? false; return result ?? false;
} catch (e) { } catch (e) {
print('开启扫描ble设备失败: $e'); print('开启扫描ble设备失败: $e');

Loading…
Cancel
Save