我目前正在尝试使用经典 BT 从外围设备读取蓝牙信号来控制我的 Qt 应用程序。稍后我可能会使用一个小的 BT 操纵杆,但现在我正在尝试连接到配对耳机上的按钮。
我以前有
- ..通过 扫描远程设备
QBluetoothDeviceDiscoveryAgent
,它返回了QBluetoothDeviceInfo
我的耳机。 - ...使用 扫描该设备上的服务,
QBluetoothServiceDiscoveryAgent
返回QBluetoothServiceInfo
QBluetoothUuid::AV_RemoteControl
...添加了一个应该连接到设备的套接字,如下所示:
socket0 = new QBluetoothSocket(QBluetoothServiceInfo::L2capProtocol); connect(socket0, &QBluetoothSocket::stateChanged, this , &BluetoothController::socketStateChanged); connect(socket0, &QBluetoothSocket::readyRead, this, &BluetoothController::readSocket); connect(socket0, &QBluetoothSocket::connected, this, &BluetoothController::serverConnected); connect(socket0, &QBluetoothSocket::disconnected, this, &BluetoothController::serverDisconnected); connect(socket0, QOverload<QBluetoothSocket::SocketError>::of(&QBluetoothSocket::error), this, &BluetoothController::serverError); QBluetoothAddress address = info.device().address(); QIODevice::ReadOnly); socket0->connectToService(address, QBluetoothUuid::AV_RemoteControl, QIODevice::ReadOnly);
此时套接字状态变为ConnectingState,没有通过错误,也没有触发我的
readyRead()
功能。
我是蓝牙新手,可能会误解连接的确切工作原理,因此将不胜感激任何帮助。
PS.:我正在使用 Linux Ubuntu 18.04 并且应用程序日志还显示:
qt.bluetooth.bluez:缺少 CAP_NET_ADMIN 权限。无法确定找到的地址是随机地址还是公共地址。