我遇到断开连接问题,并将BLE设备与手机连接。在我的手机中,我有一个断开按钮。如果手机和设备正在连接,我会按设备断开连接。它已成功断开连接。但是,当我调用connect函数时,重新连接需要10秒钟。这是我的代码和logcat。你能帮我减少重新连接的时间吗?
//Click button disconnect
public void onClickDisconnect(View view) {
mBluetoothLeService.disconnect();
}
然后我再次连接,我将按如下方式调用connect函数:
public boolean connect(final String address) {
if (mBluetoothAdapter == null || address == null) {
Log.w(TAG, "BluetoothAdapter not initialized or unspecified address.");
return false;
}
// Previously connected device. Try to reconnect.
if (mBluetoothDeviceAddress != null && address.equals(mBluetoothDeviceAddress)
&& mBluetoothGatt != null) {
Log.d(TAG, "Trying to use an existing mBluetoothGatt for connection.");
if (mBluetoothGatt.connect()) {
mConnectionState = STATE_CONNECTING;
return true;
} else {
return false;
}
}
final BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);
if (device == null) {
Log.w(TAG, "Device not found. Unable to connect.");
return false;
}
// We want to directly connect to the device, so we are setting the autoConnect
// parameter to false.
//mBluetoothGatt = device.connectGatt(this, true, mGattCallback);
new Handler(getMainLooper()).post(new Runnable() {
@Override
public void run() {
if (device != null) {
mBluetoothGatt = device.connectGatt(getApplicationContext(), true, mGattCallback);
}
}
});
}
这是我的logcat
10-27 23:19:37.284 13162-13162/com.example.blechat D/BluetoothGatt: close()
10-27 23:19:37.284 13162-13162/com.example.blechat D/BluetoothGatt: unregisterApp() - mClientIf=6
10-27 23:19:37.314 13162-13162/com.example.blechat D/BluetoothLeService: Trying to create a new connection.
10-27 23:19:37.354 13162-13162/com.example.blechat D/BluetoothGatt: connect() - device: 00:02:5B:00:15:33, auto: true
10-27 23:19:37.354 13162-13162/com.example.blechat D/BluetoothGatt: registerApp()
10-27 23:19:37.354 13162-13162/com.example.blechat D/BluetoothGatt: registerApp() - UUID=23513bb1-c4fc-4203-ad3a-d58c38f2ddfb
10-27 23:19:37.394 13162-13706/com.example.blechat D/BluetoothGatt: onClientRegistered() - status=0 clientIf=6
10-27 23:19:42.374 13162-13162/com.example.blechat D/ViewRootImpl: ViewPostImeInputStage ACTION_DOWN
10-27 23:19:48.994 13162-13162/com.example.blechat D/ViewRootImpl: ViewPostImeInputStage ACTION_DOWN
10-27 23:19:56.704 13162-13706/com.example.blechat D/BluetoothGatt: onClientConnectionState() - status=0 clientIf=6 device=00:02:5B:00:15:33
答案 0 :(得分:-1)
当客户端在链路层级别发送连接请求时,它会等待来自设备的广告数据包,指示服务器处于可连接状态。这可能需要一些时间,具体取决于服务器的广告时间间隔。
因此,减少连接(和重新连接)时间的方法通常是增加BLE设备上的广告频率。但请记住,这也会增加设备的能耗。在大多数情况下,如果您可以在未使用设备的剩余时间内节省大量能源,则可以接受10-20秒的间隔(因此,平均重新连接持续时间为5-10秒)。
但是,您可以以断开连接后不久的方式配置设备,将广告时间间隔设置为更低的值,并在特定时间跨度后返回到原始时间间隔。如果快速重新连接是一个常见的用例,那么这可能是最佳选择。
但是,如果你真的需要快速反应时间,那么BLE可能不是最佳选择,而经典蓝牙则更受欢迎。蓝牙低功耗优化用于低能耗,而不是速度。