我正在开发imx6,我正试图通过Dbus和Qt应用程序连接到wifi网络。应用程序通过Dbus正确连接到connman,我正确接收到wifi服务。问题是,当我试图连接到wiif网络时,我发现了这个错误:
";方法";连接";带有签名";ss";在接口上";net.conman.Service";不存在
我在Qt应用程序中使用的连接到wifi网络的代码是:
QDBusInterface *iface =
new QDBusInterface("net.connman","/net/connman/technology/wifi","net.connman.Service",QDBusConnection::systemBus());
if (!iface->isValid())
{
qDebug() << Q_FUNC_INFO << "Fail to connect to the Connman Technology interface: " << QDBusConnection::systemBus().lastError().message();
}
QDBusReply<void> reply = iface->call("Connect","/net/connman/service/wifi_88da1a4db14c_41684179_managed_psk","password");
if (!reply.isValid())
{
qDebug() << "Call connect result: " << reply.error().message();
}
当我尝试使用connmanctl通过shell命令连接到wifi网络时,它就像一个魅力。
我在imx6上遇到了同样的问题。对我有效的解决方案是在调用Connect方法之前为网络创建一个配置文件。
该文件应位于/var/lib/connman中,名称[SSID].config。文件内容:
[service_wifi_PUT_SERVICE_NAME]
Name = PUT_SSID
Type = wifi
Passphrase = PUT_PASSWORD
尝试以这种方式连接:
QDBusInterface *iface = new QDBusInterface("net.connman", QString{"/net/connman/service/%1"}.arg(SERVICE_NAME), "net.connman.Service", QDBusConnection::systemBus());
QDBusReply<void> reply = iface->call("Connect");
if(!reply.isValid() {
...
我目前正在开发的Qt应用程序需要一个到connman的接口,我发现这个库对libconnman-Qt很有帮助。
了解代理是如何工作的也有点棘手,但直接查看connman-api文档对connman文档也很有帮助。这有助于从";概述api.txt";。