dbus-glib我无法弄清楚如何接收{sv}

时间:2013-12-27 00:26:58

标签: glib dbus

我正在使用dbus-glib来获取smplayer2中当前正在播放的文件名。 我得到了 http://bpaste.net/show/161995/ 我试图使用Get方法获取元数据(type =“a {sv}”)属性,

我写了一些像这样的代码     DBusGConnection *总线;     GError * error = NULL;

bus = dbus_g_bus_get (DBUS_BUS_SESSION, &error);

DBusGProxy *smplayer;
smplayer= dbus_g_proxy_new_for_name (bus,
        "org.mpris.MediaPlayer2.SMPlayer2",
        "/org/mpris/MediaPlayer2", 
        "org.freedesktop.DBus.Properties");

GValue *Metadata;
dbus_g_proxy_call (smplayer, "Get", &error,
        G_TYPE_STRING,"org.mpris.MediaPlayer2.Player",
        G_TYPE_STRING,"Metadata", G_TYPE_INVALID,
        G_TYPE_VALUE, &Metadata, G_TYPE_INVALID);

但元数据被认为是空的。

请允许任何人知道这一点, 任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

根据freedesktop.org DBusBindings page,DBus-GLib已经过时了。好的捕获@nemequ

替换是GDBus(GLib中的D-Bus支持),它提供high levellow level API。我强烈建议迁移,因为新的API提供了使DBus更容易使用的方法。

我只使用过dbus低级API,而不是glib,但我认为g_dbus_gvariant_to_gvalue就是你所需要的。请注意,此方法在新的API GDBus中提供,而不是您正在使用DBus-GLib的方法。 get方法返回变量类型,它是一种排序容器。您需要从容器中获取值。

The API Reference充满了好东西。检查上面是否有窍门。希望有所帮助