Warm tip: This article is reproduced from serverfault.com, please click

c++-Qt DisconnectFromService()是否无法真正断开蓝牙设备的连接?

(c++ - Qt disconnectFromService() not actaully disconnecting bluetooth device?)

发布于 2020-12-06 22:22:26

我正在使用Qt的QBluetoothSocket类将一对蓝牙耳机连接到Windows pc,如下所示:

device->connectToService(QBluetoothAddress(device1Info[1]), QBluetoothUuid(QBluetoothUuid::SerialPort));

并断开我使用的耳机:

if (device->state() == QBluetoothSocket::ConnectedState) {
    device->disconnectFromService();
}

它们连接良好,但是当我选择断开它们的连接时,它们实际上并没有断开连接。发出断开信号,这意味着套接字确实断开了服务,但是当我在Windows设置中检查我的设备时,耳机仍会注册为已连接并具有相同的行为。可能是因为我QBluetoothUuid::SerialPort 在连接到Serive时用作QBluetoothUuid吗?或者是其他东西?

Questioner
aman
Viewed
22
Kuba hasn't forgotten Monica 2020-12-07 09:07:42

断开连接不会断开设备的连接,而只是断开套接字的连接。就像你关闭了网络插座一样,它不会断开你的PC与网络的连接:)

但是,我无法成功重现连接-除非你的耳机确实提供了用于调试之类的串口服务。

我的猜测是你的整个程序什么都不做,因为耳机不提供串行端口,而且操作系统通常会立即将音频设备连接到耳机的音频服务,因此你将无法连接它。

我认为你想得太过分了:你无需在此处使用任何蓝牙API。你需要使用音频设备API查找耳机并通过它们进行音频I / O。我不确定Qt是否会帮助你。在Qt的多媒体API中查找枚举音频设备的方法。否则,你将需要使用OS API调用或某些音频访问库。