BluetoothGatt:onClientConnParamsChanged()

时间:2017-05-11 21:02:06

标签: android bluetooth-lowenergy

我正在开发一个与BLE外设通信的Android应用程序。我能够启用通知并从BLE外设接收数据。但是,几秒钟后,我在Android Studio的Android终端上收到以下消息,并且通知停止。

我注意到Android手机仍然连接到BLE外设为Status = 0,但在BLE连接间隔更改= 156后,通知停止。

有没有人遇到过类似的问题?我正在使用Android Studio中的BluetoothLEGatt示例。

由于 哈尼阿比迪

D/BluetoothGatt: onClientConnParamsChanged() - Device=80:EA:CA:00:A8:77 interval=156 status=0enter code here

2 个答案:

答案 0 :(得分:0)

所以我也遇到了这个问题,虽然我不是100%知道确切的原因,但我至少可以告诉我"修复"问题和我的经历。

所以我使用运行6.0.1的三星Galaxy Note 4并使用RxAndroidBle来缓解在Android上处理BLE的痛苦。我的应用程序连接到PSoC4 BLE微处理器,并立即与所述微处理器进行来回数据传输。我所看到的与OP类似:通常情况下,来回传输会在以下消息中停止运行:

03-15 16:06:39.989 27793-28784/application D/BluetoothGatt: onClientConnParamsChanged() - Device=00:A0:50:65:24:91 interval=6 status=0
03-15 16:06:40.289 6292-6754/? D/BtGatt.GattService: onClientConnParamsChanged() - clientIf=7 address=00:A0:50:65:24:91, interval=39status=0
03-15 16:06:40.289 27793-28561/application D/BluetoothGatt: onClientConnParamsChanged() - Device=00:A0:50:65:24:91 interval=39 status=0
03-15 16:06:54.989 6292-6754/? D/BtGatt.GattService: onClientConnParamsChanged() - clientIf=7 address=00:A0:50:65:24:91, interval=6status=0
03-15 16:06:54.989 27793-27823/application D/BluetoothGatt: onClientConnParamsChanged() - Device=00:A0:50:65:24:91 interval=6 status=0
03-15 16:06:55.259 6292-6754/? D/BtGatt.GattService: onClientConnParamsChanged() - clientIf=7 address=00:A0:50:65:24:91, interval=39status=0
03-15 16:06:55.259 27793-28784/application D/BluetoothGatt: onClientConnParamsChanged() - Device=00:A0:50:65:24:91 interval=39 status=0

起初我觉得,由于某种原因,手机在数据传输过程中仍在协商连接间隔,并且由于某种原因,结果会完全搞砸了。

也许这就是正在发生的事情,也许它不是,但我发现的根本原因是我(显然)在BLE设备扫描仪完全之前我(显然)通过BLE与我的微处理器连接和连接完成关闭。

当用户点击表格视图单元格以连接到设备时,我最初调用停止订阅正在扫描设备的RxAndroidBle observable,这应该结束BLE扫描然后立即启动以显示新的Activity用于与PSoC4通信,PSoC4立即连接并开始与微处理器连接:

 scanSubscription.unsubscribe();
 Intent myIntent = new Intent(MainActivity.this, ConnectedActivity.class);
 myIntent.putExtra("address", testdevice.getAddress());
 myIntent.putExtra("name", testdevice.getName());
 MainActivity.this.startActivityForResult(myIntent, CONNECTED_ACTIVITY);

然而,似乎只是取消订阅扫描订阅并不会立即结束BLE扫描,因此我当前的策略是在开始与其他设备进行任何通信之前等待500毫秒。这显然不太理想 - 理想情况下,当扫描实际停止时,你会有方法回调,但我还没有想出如何做到这一点。

希望这有助于某人。

答案 1 :(得分:-2)

连接参数更新与通知订阅状态无关。你是说你的onCharacteristicChanged没有被调用,虽然你从外围设备发送通知?您应该再次检查您的代码。如果你认为你已经完成了所有正确的事情,你应该检查android的hci snoop日志或使用BLE嗅探器查看真实情况。