gpt4 book ai didi

android - 完全断开蓝牙低功耗设备

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:19:32 27 4
gpt4 key购买 nike

我在 Android 中使用 connectGatt() 方法连接到 BLE 设备。这很好用。

当我断开连接时,我使用以下内容:

private void disconnectDevice() {
gatt.disconnect();
}

当我收到回调时,我会关闭。

private BluetoothGattCallback gattCallback = new BluetoothGattCallback() {
@Override
public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
switch (newState) {
case BluetoothProfile.STATE_CONNECTED:
Log.d("BLED-GATT", "STATE_CONNECTED");
setUIConnectionStatus("Discover services on device...", Color.YELLOW);
checkEnableAddButton(simpleTrackEditText.getText().toString());
gatt.discoverServices();
break;
case BluetoothProfile.STATE_DISCONNECTED:
Log.d("BLED-GATT", "STATE_DISCONNECTED");
setUIConnectionStatus("Not Connected!", Color.RED);
gatt.close();
break;
default:
Log.d("BLED-GATT", "STATE_OTHER");
}
}
}

这已执行,调用 disconnectDevice() 后我无法再控制设备。设备本身似乎认为它仍然处于连接状态,因为我无法将它置于广播可见性模式(如果它已经连接,则会发生这种情况)。但是,如果我终止应用程序并再次打开它,那么我可以将设备设置为广播模式。这告诉我应用程序未正确断开连接。

知道我错过了什么吗?

最佳答案

问题是我在扫描期间多次连接到同一台设备,导致我的应用程序同时打开许多连接。添加 !isConnected() 解决了问题:

/**
* Connects to the device. Does nothing if already connected.
* @param macAddress the address of the device.
*/
private void connectDevice(String macAddress) {
if (isConnected()) {
return;
}

device = bluetoothAdapter.getRemoteDevice(macAddress);

if (device == null) {
showToast("Device not available");
} else {
showToast("Connecting...");
gatt = device.connectGatt(this, true, gattCallback);
}
}

关于android - 完全断开蓝牙低功耗设备,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35986549/

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