Browse Source

ios的ble假连接bug

weicu
fdp 1 year ago
parent
commit
0b84f3a7ce
  1. 2
      local_plugins/ble_service/android/src/main/kotlin/com/yunqiinnovation/ble_service/BleService.kt
  2. 10
      local_plugins/ble_service/ios/ble_service/Sources/ble_service/BleService.swift
  3. 8
      local_plugins/classic_bluetooth/ios/classic_bluetooth/Package.swift
  4. 34
      local_plugins/classic_bluetooth/ios/classic_bluetooth/Sources/classic_bluetooth/ClassicBluetoothHelper.swift

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

@ -346,7 +346,7 @@ object BleService {
} }
val filter = ScanFilter.Builder() val filter = ScanFilter.Builder()
//.setServiceUuid(ParcelUuid(uuid)) .setServiceUuid(ParcelUuid(uuid))
.build() .build()
filters.add(filter) filters.add(filter)
Log.d(TAG, "添加扫描过滤器UUID: $uuid") Log.d(TAG, "添加扫描过滤器UUID: $uuid")

10
local_plugins/ble_service/ios/ble_service/Sources/ble_service/BleService.swift

@ -300,13 +300,13 @@ private var cmdReplyType: UInt8 = 0
} }
} }
// // 开始扫描,使用构建的服务UUID数组进行过滤 // 开始扫描,使用构建的服务UUID数组进行过滤
// manager.scanForPeripherals(withServices: serviceUUIDs.isEmpty ? nil : serviceUUIDs, options: [ manager.scanForPeripherals(withServices: serviceUUIDs.isEmpty ? nil : serviceUUIDs, options: [
// CBCentralManagerScanOptionAllowDuplicatesKey: true // 允许重复以获取更新的广播数据
// ])
manager.scanForPeripherals(withServices: nil , options: [
CBCentralManagerScanOptionAllowDuplicatesKey: true // 允许重复以获取更新的广播数据 CBCentralManagerScanOptionAllowDuplicatesKey: true // 允许重复以获取更新的广播数据
]) ])
// manager.scanForPeripherals(withServices: nil , options: [
// CBCentralManagerScanOptionAllowDuplicatesKey: true // 允许重复以获取更新的广播数据
// ])
let filterInfo = serviceUUIDs.isEmpty ? "无过滤" : "过滤器数量: \(serviceUUIDs.count)" let filterInfo = serviceUUIDs.isEmpty ? "无过滤" : "过滤器数量: \(serviceUUIDs.count)"
os_log("🔍 开始扫描BLE设备(%{public}@),超时时间: %.1f秒", log: logger, type: .info, filterInfo, timeout) os_log("🔍 开始扫描BLE设备(%{public}@),超时时间: %.1f秒", log: logger, type: .info, filterInfo, timeout)

8
local_plugins/classic_bluetooth/ios/classic_bluetooth/Package.swift

@ -11,12 +11,16 @@ let package = Package(
) )
], ],
dependencies: [ dependencies: [
// 如果需要其他依赖,在这里添加 // 添加对ble_service的依赖
.package(path: "../../../ble_service/ios/ble_service")
], ],
targets: [ targets: [
.target( .target(
name: "classic_bluetooth", name: "classic_bluetooth",
dependencies: [], dependencies: [
// 添加ble_service产品依赖
.product(name: "ble-service", package: "ble_service")
],
path: "Sources" path: "Sources"
) )
] ]

34
local_plugins/classic_bluetooth/ios/classic_bluetooth/Sources/classic_bluetooth/ClassicBluetoothHelper.swift

@ -1,7 +1,7 @@
import Foundation import Foundation
import AVFoundation import AVFoundation
import CoreBluetooth import CoreBluetooth
import ble_service
/// 蓝牙事件类型 /// 蓝牙事件类型
public enum BluetoothEventType { public enum BluetoothEventType {
case stateChanged case stateChanged
@ -65,16 +65,35 @@ public class ClassicBluetoothHelper: NSObject, CBCentralManagerDelegate {
case .stateChanged: case .stateChanged:
if let state = data["state"] as? String { if let state = data["state"] as? String {
print("蓝牙状态变化: \(state)") print("蓝牙状态变化: \(state)")
// configureAudioRouteBasedOnBluetoothState()
} }
case .deviceConnected: case .deviceConnected:
print("蓝牙设备已连接") print("蓝牙设备已连接")
// 蓝牙设备连接时:末端在手机,输出端在耳机
// configureAudioForBluetoothConnected()
case .deviceDisconnected: case .deviceDisconnected:
print("蓝牙设备已断开") print("蓝牙设备已断开")
// 蓝牙设备断开时:末端和输出端都在手机 // 蓝牙设备断开时:调用BLE断开连接
/*configureAudioForBluetoothDisconnected*/() disconnectBleOnClassicBluetoothDisconnected()
}
}
/**
* 经典蓝牙断开时调用BLE断开连接
* 当检测到经典蓝牙设备断开时,主动断开BLE连接
*/
private func disconnectBleOnClassicBluetoothDisconnected() {
// 检查BLE服务是否可用
if #available(iOS 13.0, *) {
let bleService = BleService.shared
// 检查BLE是否已连接
if bleService.isConnected() {
print("检测到经典蓝牙断开,正在断开BLE连接...")
bleService.disconnect()
print("BLE连接已断开")
} else {
print("BLE未连接,无需断开")
}
} else {
print("iOS版本不支持BLE服务")
} }
} }
@ -290,6 +309,9 @@ public class ClassicBluetoothHelper: NSObject, CBCentralManagerDelegate {
"address": cleanDeviceAddress(output.uid) "address": cleanDeviceAddress(output.uid)
] ]
stateCallback?(.deviceDisconnected, ["device": device]) stateCallback?(.deviceDisconnected, ["device": device])
// 在这里调用BLE断开连接
disconnectBleOnClassicBluetoothDisconnected()
} }
// 检查当前是否还有蓝牙设备 // 检查当前是否还有蓝牙设备

Loading…
Cancel
Save