安卓蓝牙低功耗(BLE)API看起来有点奇怪,也许我漏掉了什么。我的需求是连接到一个BLE设备,然后如果一段时间内没有操作就暂时断开连接,但当用户想要做新的事情时,我希望重新连接。
最初连接时,我调用:
Gatt1 = Device.ConnectGatt (Android.App.Application.Context, false, GattCallback);
那么我在考虑进行临时断开连接,我称之为
Gatt1.Disconnect();
当我想重新连接时,我再次调用ConnectGatt()方法,这会给我一个新的BluetoothGatt对象:
Gatt2 = Device.ConnectGatt (Android.App.Application.Context, false, GattCallback);
一旦我调用Gatt1.Disconnect(),那么我就应该把Gatt1抛弃掉了吗?因为当我重新连接时,我会得到一个新的BluetoothGatt对象,所以Gatt1已经没有用了是吗?我需要调用某个函数告诉API我不再使用Gatt1了吗?
(不,我实际上不会有两个变量Gatt1和Gatt2,我只是用这些名称来表示有两个不同的对象)
当我最终决定完全不再使用这个BLE设备时,也没有计划重新连接,那么我需要调用Gatt.Close()吗(对吗?)
所以代码可能看起来更像这样:
BluetoothDevice Device = stuff();
BluetoothGatt Gatt = null;
if (connecting)
Gatt = Device.ConnectGatt(...);
else if (disconnecting temporarily)
Gatt.Disconnect();
else if (reconnecting after a temporary disconnection)
{
Gatt = null; // Yes? Do I need to specifically Dispose() this previous object?
Gatt = Device.ConnectGatt(...);
}
else if (disconnecting permanently)
{
Gatt.Close();
Gatt = null;
}
(再次强调,我不会编写这样的函数,只是为了说明各种BluetoothGatt对象的寿命)
注:BluetoothGatt是一种用于与蓝牙设备通信的API。