1

我开始在 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", "名称 org.bluez 不是由任何 .service 文件提供的")

我安装了 bluez 和 dbus。我可以通过命令搜索蓝牙设备。

我还尝试了命令 sudo bluetoothd -d -n 我得到了这个:D-Bus setup failed: Name already in use bluetoothd[21952]: Unable to get on D-Bus

有谁知道可能是什么问题?

4

1 回答 1

0

您收到的错误 ( name already in use) 意味着蓝牙守护程序已经在您的系统上运行。你可以通过做来阻止它sudo service bluetooth stop,虽然我觉得这是结束蓝牙守护进程的一种非常残酷的方式。如果您结束守护进程,您也会结束 BlueZ D-Bus 实现,因此您将无法使用它。

尽管我从未使用过 Qt 的蓝牙/dbus 实现,但您的代码存在一些问题:

首先,BlueZ 接口是通过系统总线发布的,而不是会话总线,所以这是应该进行的第一个更改。

二、"Manager"你传递的参数的作用是什么?如果您试图连接到一个调用的 DBus 接口"Manager",则没有。我不确定是否有,正如您在 2013 年提出的这个问题。您可以看到 BlueZ 使用名为 D-Feet 的程序实现的 DBus 接口。您应该尝试一下,因为它帮助我了解了 BlueZ 与 DBus 的工作原理。我推荐sudo apt-get install d-feet"/"在路径上发布的唯一接口是org.freedesktop.DBus.Introspectableorg.freedesktop.DBus.Objectmanager。同样,使用 D-Feet 可以很容易地看到和试验这一点,因为它允许抽象接口和路径的可视化表示。

万一你以后在关贸总协定方面遇到麻烦;bluetoothd使用-E实验标志运行;这启用了 BlueZ GATT 功能。(只是提个醒)。

于 2016-01-06T10:00:13.330 回答