Android kotlin 蓝牙套接字连接然后断开连接

问题描述

我遇到了蓝牙连接然后立即断开的问题,我查看了很多解决方案,但最终这个简单的解决方解决了我的问题。

但是我很想得到反馈,因为我确信我会遗漏一些固有的危险。

解决方案:我将 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 也可以帮助您。