У меня есть приложение, которое подключается (или должно подключаться) к клиенту к службе Bluetooth на устройстве Android, используя Qt Bluetooth API. Код для этого не является сложным и не сильно отличается от образца, указанного в Qt Bluetooth Overview, хотя он немного распределен, так как он является частью класса.QBluetoothSocket :: connectToService Hanging on ServiceLookupState - Почему?
В конструкторе:
mBluetoothSocket = new QBluetoothSocket(QBluetoothServiceInfo::RfcommProtocol);
В способе «waitForServiceConnection»:
mBluetoothSocket->connectToService(address, uuid);
for (unsigned i = 0; i < timeout; ++i)
{
QTime delayLimit = QTime::currentTime().addSecs(1);
while(QTime::currentTime() < delayLimit) QCoreApplication::processEvents(QEventLoop::AllEvents, 100);
qDebug() << "Current socket state is " << mBluetoothSocket->state() << endl;
if (mServiceConnected)
{
return;
}
}
...
}
Для каждой итерации для цикла (по времени ожидания до 60 секунд) я получаю следующий вывод :
Текущее состояние розетки QBluetoothSocket :: ServiceLookupState
Существует слот socketStateChanged, который принимает сигнал StateChanged из гнезда и содержит следующее:
qDebug() << "Socket state changed to " << socketState << endl;
, который выводит:
гнездо состояние изменено на QBluetoothSocket :: ServiceLookupState
только один раз. Если я вручную проверю состояние сокета в цикле, это всегда ServiceLookupState.
Я, к сожалению, не на 100% уверен, что точно ServiceLookupState влечет за собой. Qt's documentation on the QBluetoothSocket class
Сокет запрашивает параметры подключения.
, который, как я подозреваю, означает поиск портов или что-то в этом роде.
Клиент рабочего стола успешно находит службу, зарегистрированную на устройстве, с помощью службы QBluetoothServiceDiscoveryAgent. Я протестировал это против хорошо известного Bluetooth-сервиса (образец Android BluetoothChat) с теми же результатами, поэтому я уверен, что проблема связана с настольным клиентом. Что я делаю не так?
Исключения не выбрасываются и QBluetoothSocket :: error() всегда указывает на отсутствие ошибки.