我正在使用Qt的QBluetoothSocket类将一对蓝牙耳机连接到Windows pc,如下所示:
device->connectToService(QBluetoothAddress(device1Info[1]), QBluetoothUuid(QBluetoothUuid::SerialPort));
并断开我使用的耳机:
if (device->state() == QBluetoothSocket::ConnectedState) {
device->disconnectFromService();
}
它们连接良好,但是当我选择断开它们的连接时,它们实际上并没有断开连接。发出断开信号,这意味着套接字确实断开了服务,但是当我在Windows设置中检查我的设备时,耳机仍会注册为已连接并具有相同的行为。可能是因为我QBluetoothUuid::SerialPort
在连接到Serive时用作QBluetoothUuid吗?或者是其他东西?
断开连接不会断开设备的连接,而只是断开套接字的连接。就像你关闭了网络插座一样,它不会断开你的PC与网络的连接:)
但是,我无法成功重现连接-除非你的耳机确实提供了用于调试之类的串口服务。
我的猜测是你的整个程序什么都不做,因为耳机不提供串行端口,而且操作系统通常会立即将音频设备连接到耳机的音频服务,因此你将无法连接它。
我认为你想得太过分了:你无需在此处使用任何蓝牙API。你需要使用音频设备API查找耳机并通过它们进行音频I / O。我不确定Qt是否会帮助你。在Qt的多媒体API中查找枚举音频设备的方法。否则,你将需要使用OS API调用或某些音频访问库。
啊,我明白了,所以一旦通过插孔连接耳机,就无法让PC断开耳机的连接吗?我是否还应该使用串行端口以外的其他Uuid耳机?
@aman当然,有一种方法可以使用操作系统的API断开设备的连接。但是在Windows上它们是一团糟。至于连接耳机:您必须列举它们提供的服务并从其中之一中进行选择。如果操作系统已将耳机作为音频设备连接,则您的应用程序将无法接管连接。您需要先获得操作系统才能断开音频设备的连接。我认为您不检查任何错误,并且您的代码可能根本不执行任何操作。我无法使其在这里正常工作-一切都没有如预期的那样成功。
好吧,这很有意义,谢谢您的有用回复!