我正在浏览BluetoothGatt.java并找到方法boolean connect(Boolean autoConnect, BluetoothGattCallback callback, Handler handler)
此方法正上方的文档指定这用于启动与BLE设备的连接。
但是,官方Android文档指出应该使用连接BLE设备boolean connect()。
此connect()方法的文档声明这用于重新连接回设备。
我很困惑,因为gatt.connect()
有时不可靠(即使BLE设备在范围内,也没有调用连接设备的回调,但是当我尝试在第二次或第三次尝试时连接时连接。)< / p>
使用前面提到的方法在第一次连接尝试期间增加连接机会会不会更好?
有人可以分享一些有关此事的信息吗?
答案 0 :(得分:0)
但是,官方的Android文档声明要使用BLE设备连接布尔值connect()。
以上方法是蓝牙Gatt方法,它将帮助您连接ble设备。 连接成功后,BluetoothGatt将调用具有不同覆盖方法的 BluetoothGattCallback 。
根据我的实施,我发现使用 BluetoothAdapter.LeScanCallback 的设备用于较低版本。之后: -
private void addDeviceItem(BluetoothDevice device, int rssi) {
String penAddress = device.getAddress();
mBluetoothLeService.connect(penAddress );
}
public boolean connect(final String address) {
if (mBluetoothAdapter == null || address == null) {
Log.w(TAG, "BluetoothAdapter not initialized or unspecified address.");
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, false, mGattCallback);
// refreshDeviceCache(mBluetoothGatt);
Log.d(TAG, "Trying to create a new connection.");
mConnectionState = STATE_CONNECTING;
return true;
}
我将始终与设备连接,完成蓝牙后,您必须通过调用Gatt.disconnect()与设备断开连接。然后再使用上面的代码建立连接。
答案 1 :(得分:0)
我在Which correct flag of autoConnect in connectGatt of BLE?的答案应该解释一切。
基本上,“直接连接”具有比“自动连接”更高的扫描窗口/间隔占空比。这就是为什么如果外围设备上有很长的广告时间间隔,自动连接可能需要很长时间。