Browse Source

上传android 代码

weicu
liwei1dao 1 year ago
parent
commit
1abdbef73d
  1. 6
      lib/data/services/ble_manager.dart
  2. 5
      lib/modules/pairing/controllers/pairing_controller.dart
  3. 55
      local_plugins/ble_service/android/src/main/kotlin/com/yunqiinnovation/ble_service/BleService.kt

6
lib/data/services/ble_manager.dart

@ -532,7 +532,7 @@ class BleManager extends GetxService {
try { try {
// 从.env文件直接读取环境变量 // 从.env文件直接读取环境变量
var serverurl = dotenv.env['SERVER_URL'] ?? ''; var serverurl = dotenv.env['SERVER_URL'] ?? '';
if (Get.deviceLocale?.countryCode != 'CN') { if (Get.locale?.countryCode != 'CN') {
serverurl = dotenv.env['HW_SERVER_URL'] ?? ''; serverurl = dotenv.env['HW_SERVER_URL'] ?? '';
} }
@ -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

@ -844,9 +844,11 @@ class PairingController extends GetxController with WidgetsBindingObserver {
license: ''), license: ''),
); );
if (existingDevice.id != -1) { if (existingDevice.id != -1) {
_bleManager.stopScan();
// 已经绑定 // 已经绑定
return 10; return 10;
} else { } else {
_bleManager.stopScan();
return 1; return 1;
} }
} }
@ -874,9 +876,11 @@ class PairingController extends GetxController with WidgetsBindingObserver {
license: ''), license: ''),
); );
if (existingDevice.id != -1) { if (existingDevice.id != -1) {
_bleManager.stopScan();
// 已经绑定 // 已经绑定
return 10; return 10;
} else { } else {
_bleManager.stopScan();
return 1; return 1;
} }
} }
@ -889,6 +893,7 @@ class PairingController extends GetxController with WidgetsBindingObserver {
} }
await Future.delayed(Duration(seconds: 1)); await Future.delayed(Duration(seconds: 1));
} }
_bleManager.stopScan();
if (product != null && product.devicetype == 2) { if (product != null && product.devicetype == 2) {
//ble设备 必须要扫描到结果 //ble设备 必须要扫描到结果
return 0; return 0;

55
local_plugins/ble_service/android/src/main/kotlin/com/yunqiinnovation/ble_service/BleService.kt

@ -307,27 +307,32 @@ object BleService {
Log.i(TAG, "开始主动扫描BLE设备...") Log.i(TAG, "开始主动扫描BLE设备...")
scanResults.clear() scanResults.clear()
// Log.i(TAG, "liwei---------startScan 5") // Log.i(TAG, "liwei---------startScan 5")
// val filter = ScanFilter.Builder() val filter = ScanFilter.Builder()
// // .setServiceUuid(ParcelUuid(BleConst.PRIMARY_SERVICE_UUID)) // .setServiceUuid(ParcelUuid(BleConst.PRIMARY_SERVICE_UUID))
// .setManufacturerData(0xEFAB, byteArrayOf(0xA0.toByte(), 0x01)) // .setManufacturerData(0xEFAB, byteArrayOf(0xA0.toByte(), 0x01))
// .build() .build()
// Log.i(TAG, "liwei---------startScan 6") // val filters = uuids.mapNotNull { uuidStr ->
// val settings = ScanSettings.Builder() // try {
// .setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY) // // 清理UUID字符串,移除非十六进制字符
// // .setCallbackType(ScanSettings.CALLBACK_TYPE_FIRST_MATCH) // val cleanUuidStr = uuidStr.replace("[^0-9A-Fa-f]".toRegex(), "")
// .setCallbackType(ScanSettings.CALLBACK_TYPE_FIRST_MATCH) // 使用ALL_MATCHES获取所有结果 //
// .setReportDelay(0) // 立即报告结果 // // 验证清理后的字符串长度(应该是4位十六进制字符)
// .build() // if (cleanUuidStr.length != 4) {
// val filter = ScanFilter.Builder() // Log.w(TAG, "无效的UUID格式: $uuidStr,清理后: $cleanUuidStr,长度: ${cleanUuidStr.length}")
// // 建议用 Service UUID 或 Device Name 替代 Manufacturer Data // return@mapNotNull null
// // .setServiceUuid(ParcelUuid(BleConst.PRIMARY_SERVICE_UUID)) // }
//// .setDeviceName(deviceName) // 更通用、更安全 //
// .build() // val fullUuid = "0000$cleanUuidStr-0000-1000-8000-00805f9b34fb"
val filters = uuids.map { uuidStr -> // Log.d(TAG, "扫描uuid: $fullUuid")
ScanFilter.Builder() //
.setServiceUuid(ParcelUuid(UUID.fromString(uuidStr))) // ScanFilter.Builder()
.build() // .setServiceUuid(ParcelUuid(UUID.fromString(fullUuid)))
} // .build()
// } catch (e: IllegalArgumentException) {
// Log.e(TAG, "构造UUID失败: $uuidStr", e)
// null
// }
// }
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) // 推荐:不会触发权限问题
@ -335,7 +340,7 @@ object BleService {
.build() .build()
// Log.i(TAG, "liwei---------startScan 7") // Log.i(TAG, "liwei---------startScan 7")
try { try {
scanner.startScan(filters, settings, scanCallback) scanner.startScan(listOf(filter), settings, scanCallback)
isScanning = true isScanning = true
// Log.i(TAG, "liwei---------startScan 8") // Log.i(TAG, "liwei---------startScan 8")
// 设置扫描超时 // 设置扫描超时
@ -468,10 +473,10 @@ object BleService {
val serviceUuids = val serviceUuids =
scanRecord?.serviceUuids?.joinToString(", ") { it.uuid.toString() } ?: "无" scanRecord?.serviceUuids?.joinToString(", ") { it.uuid.toString() } ?: "无"
// Log.d( Log.d(
// TAG, "liwei--------- 扫描到设备: 名称=${device.name ?: "未知"}, 地址=${device.address}, " + TAG, "liwei--------- 扫描到设备: 名称=${device.name ?: "未知"}, 地址=${device.address}, " +
// "RSSI=${result.rssi}, 服务UUID=[$serviceUuids]" "RSSI=${result.rssi}, 服务UUID=[$serviceUuids]"
// ) )
val info = mutableMapOf( val info = mutableMapOf(
"name" to (device.name ?: "未知"), "name" to (device.name ?: "未知"),
"address" to device.address "address" to device.address

Loading…
Cancel
Save