问题描述
我遇到了蓝牙连接然后立即断开的问题,我查看了很多解决方案,但最终这个简单的解决方案解决了我的问题。
但是我很想得到反馈,因为我确信我会遗漏一些固有的危险。
解决方案:我将 socket.connect() 放入一个循环中(如下所示)。 注意:这对我有用,其他堆栈溢出的解决方案没有
- 最明显的是,我没有为 while 循环设置超时(我稍后会处理)
- 我也知道每个设备可以有多个 uuid,但这不是我想要解决的问题。
fun connect(device: BluetoothDevice) {
bluetoothAdapter?.canceldiscovery()
val socket = device.createRfcommSocketToServiceRecord(device.uuids[0].uuid)
Thread().run {
while (!socket.isConnected) {
try {
socket.connect()
} catch (e: Exception) {
Log.d("DEVICE_CONNECT_FAIL",e.toString())
}
}
if (socket.isConnected) {
interrupt()
}
}
}
解决方法
阅读本文档https://developer.android.com/reference/android/bluetooth/BluetoothDevice#createRfcommSocketToServiceRecord(java.util.UUID) 了解如何建立安全连接。
我建议您尝试使用具有正确 UUID 的不安全类型的连接
这个 question 也可以帮助您。