我正在使用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);
但元数据被认为是空的。
请允许任何人知道这一点, 任何帮助将不胜感激答案 0 :(得分:0)
根据freedesktop.org DBusBindings page,DBus-GLib已经过时了。好的捕获@nemequ
替换是GDBus(GLib中的D-Bus支持),它提供high level和low level API。我强烈建议迁移,因为新的API提供了使DBus更容易使用的方法。
我只使用过dbus低级API,而不是glib,但我认为g_dbus_gvariant_to_gvalue就是你所需要的。请注意,此方法在新的API GDBus中提供,而不是您正在使用DBus-GLib的方法。 get
方法返回变量类型,它是一种排序容器。您需要从容器中获取值。
The API Reference充满了好东西。检查上面是否有窍门。希望有所帮助