Android 无法使用bluetoothgatt.connect()重新连接;安卓ble

Android 无法使用bluetoothgatt.connect()重新连接;安卓ble,android,bluetooth-lowenergy,android-bluetooth,Android,Bluetooth Lowenergy,Android Bluetooth,我们正在编写一个ble应用程序,其中希望与要连接的外围设备建立持久连接。出于同样的目的,我们希望在失去现有连接时重新连接外围设备。所以作为中心的android应用程序只是尝试使用bluetoothgatt.connect()方法重新连接 但每当我们尝试这样做时,我们的重新连接就会失败 12-02 21:47:11.865:D/BluetoothGatt(31963):onClient连接状态()-status=6 clientIf=6设备=*******回调 奇怪的是status=6,它不支持请

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

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

12-02 21:47:11.865:D/BluetoothGatt(31963):onClient连接状态()-status=6 clientIf=6设备=*******回调

奇怪的是status=6,它不支持请求

最初,我们使用bluetoothdevice.connectGatt方法连接到外围设备,设置或不设置自动连接标志

我们观察到的另一件事是,最初当我们失去连接时,我们会得到以下回调

onClientConnectionState()-status=8 clientIf=6设备=*******回调。其中,状态8为GATT-INSUF授权。但是如果您看到btsnoop_hci.log文件,断开连接的原因是连接超时,这是预期的,因为我们超出了范围。但status=8有误导性

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

我们用棒棒糖和其他一些设备在Nexus5上观察到了所有这些东西


任何帮助都将不胜感激

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

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

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

告诉我它是否有效


首先,请注意状态8,因为超时一点也不误导。因为这就是当由于任何原因,比如外围设备被关闭或超出范围,实际存在连接超时时所得到的结果


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

我想说,当实际问题是连接超时时,GATT\u INSUF\u授权是一个误导性错误代码。事实上,我不会说误导,我会说完全不正确。