我正在尝试开发一个使用bluez堆栈,pulseaudio和ofono的应用程序,以便连接到电话并完成诸如媒体播放(A2DP),媒体控制(AVRCP)和免提电话(HFP)之类的任务)。当我通过bluetoothctl
连接到手机时,它将自动连接到所有可用的配置文件,因此可以通过程序使用所有配置文件A2DP,AVRCP和HFP。如果我没有使用bluetoothctl
连接到手机,则onono中不会启用免提/ HFP调制解调器。
但是,当我在Qt中使用QBluetoothSocket并使用配置文件进行连接时,总是会有未连接的配置文件。例如,连接到免提配置文件,电话就可以,但是媒体控件不起作用。简而言之,我希望能够像bluetoothctl
一样连接到蓝牙。我在Qt中的内容如下(简称):
static const QList<QBluetoothUuid> audioUuids = QList<QBluetoothUuid>()
<< QBluetoothUuid::HeadsetAG
<< QBluetoothUuid::AV_RemoteControlTarget;
..
void BtConnection::setConnection(int index)
{
if(m_bluetoothSocket == nullptr) {
m_bluetoothSocket = new QBluetoothSocket(QBluetoothServiceInfo::RfcommProtocol);
qDebug() << "Created Bluetooth Socket";
}
if(m_bluetoothSocket != nullptr) {
connect(m_bluetoothSocket, SIGNAL(connected()), this, SLOT(connected()));
connect(m_bluetoothSocket, SIGNAL(disconnected()), this, SLOT(disconnected()));
connect(m_bluetoothSocket, SIGNAL(error(QBluetoothSocket::SocketError)),
this, SLOT(connectionError(QBluetoothSocket::SocketError)));
}
m_device = get(index);
// Check if an element in m_device.serviceUuids() match with an element in audioUuids
QList<QBluetoothUuid>::const_iterator uuid;
for (uuid = audioUuids.begin(); uuid != audioUuids.end(); ++uuid) {
if(m_device.serviceUuids().indexOf(*uuid) > 0) {
// This device supports one of the uuids we have scanned for
if(m_bluetoothSocket != nullptr) {
qDebug() << "*****Connecting... " << *uuid;
m_bluetoothSocket->connectToService(m_device.address(), *uuid);
return;
}
}
}
qDebug() << "*****Cannot connect to service...";
}
如果您不清楚,我愿意发布更多代码。像bluetoothctl
一样,在如何使用Qt连接到蓝牙方面,任何帮助都将受到极大的赞赏。