- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我计划开发一个应用程序,它将使用 DBus 和 connman,一个用于嵌入式设备的无线管理器。根据我的理解,DBus 公开了程序使用的方法,并允许开发人员在自己的程序中也使用这些方法。
我知道Qt有QtDbus模块,如果我的理解是正确的,net.connman.Manager接口(interface)下的GetServices方法显示了可用的无线网络。检查 qdbusviewer 程序中 GetServices 方法的输出,我可以看到每个无线网络都有自己唯一的对象路径,例如 /net/connman/service/wifi_00120ec15ba0_4c616964614d616774616c6173_managed_psk。
要在 net.connman.Services 接口(interface)下使用 Connect 和 Disconnect 方法,我需要对象路径,以便我可以创建一个新接口(interface),允许我调用 Connect/Disconnect。我目前正在尝试此处概述的方法 How do I extract the returned data from QDBusMessage in a Qt DBus call? ,但是当我尝试返回对象路径时,我只会得到一个空白:
这是我获取对象路径的代码:
QDBusConnection bus = QDBusConnection::systemBus();
QDBusInterface *interface = new QDBusInterface("net.connman",
"/",
"net.connman.Manager",
bus,
this);
QDBusMessage test = interface->call("GetServices");
QList<QVariant> outArgs = test.arguments();
QVariant first = outArgs.at(0);
qDebug() << first;
QDBusVariant dbvFirst = first.value<QDBusVariant>();
QVariant vFirst = dbvFirst.variant();
qDebug() << vFirst;
QDBusArgument dbusArgs = vFirst.value<QDBusArgument>();
qDebug() << "QDBusArgument current type is" << dbusArgs.currentType();
QDBusObjectPath path;
dbusArgs.beginArray();
while (!dbusArgs.atEnd())
{
dbusArgs >> path;
}
dbusArgs.endArray();
qDebug() << path.path();
如何提取 GetService 方法返回的参数和对象路径?有没有人正确地做到了这一点?我是 Qt 和编程的新手,所以任何帮助将不胜感激。
谢谢
最佳答案
这可能会晚一些,但希望这可以帮助其他人。我不确定您的调用的返回类型(在 dbus 中是 a(oa{sv})),但我尝试使用 QArrayOfPathProperties。因此,使用您的代码,test.arguments() 返回的类型将是:
QArrayOfPathProperties outArg;
提取可能是这样的:
for (int row = 0; row < outArg.size(); ++row) {
QMap<QString,QVariant> map = outArg.at(row).properties;
// for example you can extract the value like this:
auto serviceName = map.value("Name");
}
关于c++ - 从 net.connman.Manager 的 GetService 方法动态提取 D-Bus 参数和对象路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28979341/
非常简单的用例:我有两个以太网接口(interface),都应该使用 DHCP 连接。默认路由是哪一条并不重要,因为它只是一种专用的概念验证设置。但是,热插拔必须适用于两个接口(interface)(
我编写了一个简单的 Python 脚本来注册代理并连接到 connman 服务: #!/usr/bin/python import gobject import dbus import dbus.se
我通常使用 connman 使用以下命令为我的 beaglebone 硬件设置静态 IP:connmanctl config ethernet_985dad375f63_cable --ipv4 手册
我正在使用 glib 实现一个 connman DBUS 客户端。我已经实现了 net.connman.Agent DBUS 服务器。但是当我尝试连接到某些 net.connman.Service 时
有什么方法可以配置 systemd 服务(例如 serviceX)以等待 connmand 服务在 serviceX 运行之前完成网络接口(interface)配置?根据我对 systemd 的理解,
我的主板使用 yocto rocko我在启动时使用 rc.local 设置静态 ip。但是一段时间后 ip 发生了变化。所以我发现以下文件是罪魁祸首 /var/lib/connman/ethernet
如何在用户空间程序中等待 connman 完成 Linux 启动上的网络配置? (不幸的是,这不是 Wants=connman.service。) systemd 服务 connman 启动后,我的用
我的任务是在使用 ConnMan 的 Linux 上备份和恢复网络设置。我是否可以通过复制 /var/lib/connman 中的设置并在恢复时将它们放在同一文件夹中来做到这一点? 如果没有,有什么建
我一直在尝试使用各种 Python 库来处理 Connman 和 dbus,尤其是这个示例代码: https://github.com/liamw9534/pyconnman/blob/master/
我正在尝试使用 connmanctl 为 wifi 网络设置静态 IP(手动,无 dhcp)地址。我正在运行 angstrom linux。 我得到以下信息: 连接器 connmanctl> 配置 w
嗨,过去几天我在尝试使用 dbus 连接到 protected WiFi 网络时遇到了这个问题。所以到目前为止我开发的代码是: 注册代理 var dbus = require('dbus-native
我计划开发一个应用程序,它将使用 DBus 和 connman,一个用于嵌入式设备的无线管理器。根据我的理解,DBus 公开了程序使用的方法,并允许开发人员在自己的程序中也使用这些方法。 我知道Qt有
我是一名优秀的程序员,十分优秀!