Qt disconnect From Service() 实际上没有断开蓝牙设备?

Posted

技术标签:

【中文标题】Qt disconnect From Service() 实际上没有断开蓝牙设备?【英文标题】:Qt disconnectFromService() not actaully disconnecting bluetooth device? 【发布时间】:2021-03-18 06:50:57 【问题描述】:

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

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

并断开我使用的耳机:

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

它们可以正常连接,但是当我选择断开它们时,它们实际上并没有断开。断开信号 发出,这意味着套接字确实断开了服务但是当我在 Windows 中检查我的设备时 设置耳机仍然注册为已连接并且行为如此。这可能是因为我使用的是QBluetoothUuid::SerialPort 作为连接到服务器时的QBluetoothUuid?还是别的什么?

【问题讨论】:

【参考方案1】:

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

我无法成功重现连接 - 除非您的耳机确实提供用于调试的串行端口服务或其他东西。

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

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

【讨论】:

啊,我明白了,所以一旦通过插座连接耳机,就无法让 PC 断开耳机的连接?除了 SerialPort 之外,我还应该为耳机使用不同的 Uuid 吗? @aman 当然有一种方法可以断开设备 - 使用操作系统的 API。不过,它们在 Windows 上是一团糟。至于连接耳机:您必须列举它们提供的服务并从中选择一种。如果操作系统已将耳机作为音频设备连接,那么您的应用程序将无法接管连接。您需要先让操作系统断开音频设备。我认为您没有检查任何错误,并且您的代码可能根本没有做任何事情。我无法让它在这里工作 - 没有任何成功,正如预期的那样。 好吧,这是有道理的,谢谢您的有用回复!

以上是关于Qt disconnect From Service() 实际上没有断开蓝牙设备?的主要内容,如果未能解决你的问题,请参考以下文章

Disconnected from the target VM, address: '127.0.0.1:59126', transport: 'socket'

grails项目启动时的Disconnected from the target VM, address: '127.0.0.1:xxxxx'错误

Python需要disconnect信号吗

vue:在router里面给页面加title

Qt笔记-解决QSslSocket中QWaitCondition: Destroyed while threads are still waiting问题

QT 套接字等待用户输入