我开始在Qt中使用DBus和蓝牙。我想开发一个脚本,只需通过DBus调用方法并获得回复。代码的一部分在这里(这是主要的部分):
QString hostname("00:07:80:60:CE:22");
QDBusConnection bus = QDBusConnection::sessionBus();
QDBusInterface interface("org.bluez", "/", "Manager", bus, 0);
qDebug()<<"is valid: "<<interface.isValid()<<interface.lastError();
interface.lastError()给出以下错误:
QDBusError(“org.freedesktop.DBus.Error.ServiceUnknown”,“任何.service文件未提供名称org.bluez”)
我安装了bluez和dbus。我可以从命令中搜索蓝牙设备。
我也试过命令sudo bluetoothd -d -n然后我得到这个: D-Bus设置失败:名称已在使用中 bluetoothd [21952]:无法上D-Bus
有谁知道可能会出现什么问题?
答案 0 :(得分:0)
您收到的错误(name already in use
)表示蓝牙守护程序已在您的系统上运行。你可以通过sudo service bluetooth stop
来阻止它,虽然我觉得这是一个非常野蛮的方式来结束蓝牙守护进程。如果你结束守护进程,你也会结束BlueZ D-Bus实现,所以你将无法使用它。
虽然我从未使用过Qt的蓝牙/ dbus实现,但您的代码存在一些问题:
首先,BlueZ界面是通过系统总线发布的,而不是会话总线,因此这是应该进行的第一次更改。
其次,你传递"Manager"
参数的功能是什么?如果您尝试挂钩名为"Manager"
的DBus接口,则没有。我不确定是否有,看到你在2013年问过这个问题。你可以看到Bluez使用名为D-Feet的程序实现的DBus接口。你应该尝试一下,因为它帮助我理解了Bluez与DBus的工作原理。我推荐sudo apt-get install d-feet
。在"/"
路径发布的唯一接口是org.freedesktop.DBus.Introspectable
和org.freedesktop.DBus.Objectmanager
。同样,使用D-Feet可以很容易地看到并进行实验,因为它允许抽象接口和路径的可视化表示。
如果有任何机会,你以后会因GATT而遇到麻烦;使用bluetoothd
实验标记运行-E
;这使BlueZ GATT功能成为可能。 (只是抬头)。