Android 蓝牙gatt:onClientConnParamsChanged()
我正在开发一个Android应用程序,它可以与一个可编程外围设备进行通信。我能够启用通知并从BLE外围设备接收数据。然而,几秒钟后,我在Android Studio的Android终端上收到以下消息,通知停止 我注意到Android手机仍然连接到BLE外设,状态为0,但在BLE连接间隔更改为156后,通知停止 有没有人遇到过类似的问题?我正在使用Android Studio中的BluetoothLEGatt示例 谢谢 哈尼阿比迪Android 蓝牙gatt:onClientConnParamsChanged(),android,bluetooth-lowenergy,Android,Bluetooth Lowenergy,我正在开发一个Android应用程序,它可以与一个可编程外围设备进行通信。我能够启用通知并从BLE外围设备接收数据。然而,几秒钟后,我在Android Studio的Android终端上收到以下消息,通知停止 我注意到Android手机仍然连接到BLE外设,状态为0,但在BLE连接间隔更改为156后,通知停止 有没有人遇到过类似的问题?我正在使用Android Studio中的BluetoothLEGatt示例 谢谢 哈尼阿比迪 D/BluetoothGatt: onClientConnPara
D/BluetoothGatt: onClientConnParamsChanged() - Device=80:EA:CA:00:A8:77 interval=156 status=0enter code here
连接参数更新与通知订阅状态无关。您是说,尽管您从外围设备发送通知,但不会调用onCharacteristicChanged吗?你应该再次检查你的代码。如果你认为你做的一切都是正确的,你应该检查android的hci snoop日志或使用BLE嗅探器来查看真正发生了什么。连接参数更新与通知订阅状态无关。您是说,尽管您从外围设备发送通知,但不会调用onCharacteristicChanged吗?你应该再次检查你的代码。如果你认为你所做的一切都是正确的,那么你应该检查android的hci snoop日志或使用BLE嗅探器来查看真正发生的情况。因此我也遇到了这个问题,尽管我不100%知道确切的原因,但我至少可以告诉大家我是如何“修复”这个问题和我的经验的 因此,我使用运行6.0.1的三星Galaxy Note 4和RxAndroidBle来缓解在Android上处理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与微处理器连接和接口
当用户点击table view单元格连接到设备时,我最初打电话是为了停止订阅正在扫描设备的Rxandroidable observable,应结束BLE扫描,然后立即启动,显示与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毫秒,然后再开始与其他设备的任何通信。这显然是不理想的-理想情况下,当扫描实际上停止时,您会有一个方法回调,但我还没有想出如何做到这一点
希望这对某人有所帮助。所以我也遇到了这个问题,虽然我不完全知道确切的原因,但我至少可以传达我是如何“修复”问题和我的经验的 因此,我使用运行6.0.1的三星Galaxy Note 4和RxAndroidBle来缓解在Android上处理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与微处理器连接和接口
当用户点击table view单元格连接到设备时,我最初打电话是为了停止订阅正在扫描设备的Rxandroidable observable,应结束BLE扫描,然后立即启动,显示与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毫秒,然后再开始与其他设备的任何通信。这显然是不理想的-理想情况下,当扫描实际上停止时,您会有一个方法回调,但我还没有想出如何做到这一点
希望这对某人有所帮助。嗨,我也面临同样的问题。你解决了吗?同样的问题。如果有人解决了这个问题,请发布解决方案有人解决过这个问题吗?我一直在想方设法解决这个问题。我猜测的是,电话决定在连接/数据传输的中间协商BLE连接间隔,这将整个事情都搞糟了。我在旧Note4上运行Android 6.0.1,我非常可靠地看到了这个问题。即使试图强制进行连接间隔协商,似乎也无法消除问题。在这里可以看到相同的问题。我最初得到一个
interval=6 status=0
,然后如果我不请求高优先级,它将更新为interval=36
,否则在连接过程中它将更新为interval=12 status=0
。在这两种情况下,一段时间后它会再次更新回interval