我按照Qt文档在Qt 5.5.1中创建了一个蓝牙通信器。我已经到了能够查看蓝牙设备提供的服务列表的地步。服务由以下人员生成:
QLowEnergyService *service = controller->createServiceObject(serviceUuid);
其中控制器是QLowEnergyController,serviceUuid是QBluetoothUuid。该服务已成功创建,但由于它是我尝试连接到的设备提供的自定义服务,因此名称未知。在这一点上,我打电话:
service->discoverDetails();
它将服务从 QLowEnergyService::D iscoveryRequired 状态转换为 QLowEnergyService::D iscoveringServices 状态。一旦发生这种情况,状态将永远不会再次更改,也不会引发任何错误。有没有办法拉出"未知服务"的特征?我已经根据我对服务的预期检查了 Uuid,它是正确的。我也有预期特征的 Uuid。
注意:我正在使用pyqt(QT C++的Python绑定库)。
我在尝试连接到某些提供两种服务的设备时偶然发现了问题。一种是标准电池服务,另一种是私人定制非标准服务。我注意到我能够成功发现面糊服务,但我无法发现该自定义服务。但是,由于某种原因,当我订阅service_error信号时,发现工作正常,每当我将其注释掉时,它都不起作用。
void QLowEnergyService::error(QLowEnergyService::ServiceError newError)
我知道这很有趣,我没有解释,但它可能是相关的,我觉得值得分享。
QMetaObject::invokeMethod(this, "discoverCharacteristics", Qt::QueuedConnection);
void discoverCharacteristics() {
service->discoverDetails();
}