gpt4 book ai didi

Android BLE(低功耗蓝牙)连接/断开/重新连接

转载 作者:行者123 更新时间:2023-11-29 01:08:03 81 4
gpt4 key购买 nike

Android 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 对象?我是否需要调用一些函数来告诉 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 对象 (Gatt1) 后对其进行处理,方法是对其调用 close() 方法。我猜只是让垃圾收集器清理它不起作用,因为它没有调用内部蓝牙堆栈来清理它的终结器。如果您不关闭该对象而只是删除引用,您最终将用完 BluetoothGatt 对象(设备上所有应用程序总共最多可以有 32 个对象)。

关于Android BLE(低功耗蓝牙)连接/断开/重新连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45550882/

81 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com