无法使用bluetoothgatt.connect()+ android ble重新连接

时间:2014-12-03 06:49:30

标签: android bluetooth-lowenergy android-bluetooth

我们正在编写一个可以与我们想要连接的外围设备建立持久连接的应用程序。出于同样的目的,我们希望在松开现有连接时重新连接外围设备。所以android应用程序作为中心只是尝试使用bluetoothgatt.connect()方法重新连接。

但是每当我们尝试这样做时,我们的重新连接就会失败

12-02 21:47:11.865:D / BluetoothGatt(31963):onClientConnectionState() - status = 6 clientIf = 6 device = ******** callback。

这里奇怪的是status = 6,这是请求不受支持。

最初我们使用bluetoothdevice.connectGatt方法连接到外设,无论是否设置了autoconnect标志。

我们观察到的另一件事是,当我们失去连接时,我们正在进行回调

onClientConnectionState() - status = 8 clientIf = 6 device = ********回调。其中状态8是GATT_INSUF_AUTHORIZATION。但是如果你看到btsnoop_hci.log文件,断开连接的原因就是连接超时,因为我们超出了范围。但是status = 8会产生误导。

我们发现另一件不明显的事情是,如果我在断开连接后丢弃现有的bluetoothgatt对象并使用bluetoothdevice.connectGatt创建一个新对象,我们就会连接到更奇怪的设备。

我们正在使用棒棒糖和其他一些设备在nexus 5上观察所有这些事情。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

首先你所有的状态8,对于超时一点都不会产生误导。因为这是因为任何原因导致实际连接超时时所得到的,例如外围设备被关闭或移出范围。

其次你会收到状态 - 6(不支持的请求),主要是因为你的第一个请求是自动连接请求(即你在connectGatt方法中为auto标志传递了true),其中android ble实现将负责让你连接每当你超时。这意味着您不必再次发出连接请求,因为只要外围设备返回范围,您就会自动连接。

答案 1 :(得分:0)

我想帮助您,我需要有关断开侧设备的更多信息。 当您丢失连接时,设备始终处于打开状态?

对于使用spécifique设备的init Android,我认为您需要再次进行扫描,无论设备是否再次打开。 当您运行扫描时,Android会保存设备的一些信息并使用与他相关的信息。

您可以尝试使用BluetoothAdapter.startLeScan()重新扫描设备,在获得设备后,您可以使用bluetoothdevice.connectGatt()。

告诉我它是否有效。

此致