Я пытаюсь разработать приложение, которое использует стек bluez вместе с pulseaudio и ofono для подключения к телефону и выполнения таких задач, как воспроизведение мультимедиа (A2DP), управление мультимедиа (AVRCP) и телефония на основе громкой связи (HFP).).Когда я подключаюсь к своему телефону через bluetoothctl
, он автоматически подключается ко всем доступным профилям, поэтому использование всех профилей A2DP, AVRCP, HFP через мою программу достижимо.Если я не подключаюсь к телефону с помощью bluetoothctl
, модем громкой связи / HFP не включен / не включен в режиме ofono.
Однако, когда я использую QBluetoothSocket в Qt и подключаюсь с помощью профиля, всегда есть профиль, который не подключен.Например, при подключении к профилю Handsfree телефония работает, но управление мультимедиа не работает.Короче говоря, я хочу иметь возможность подключаться к Bluetooth как 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...";
}
Я был бы готов выложить больше кода, если вам это не понятно.С благодарностью приветствуется любая помощь по подключению к bluetooth с Qt, как bluetoothctl
.