【问题标题】:dbus-glib i can't figure out how to receive a{sv}dbus-glib 我不知道如何接收{sv}
【发布时间】:2013-12-27 00:26:57
【问题描述】:

我正在使用 dbus-glib 来获取 smplayer2 中当前正在播放的文件名。 我得到了 http://bpaste.net/show/161995/ 我试图使用 Get 方法来获取 Metadata(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);

但元数据看起来是空的。

有人知道吗,拜托, 任何帮助将不胜感激

【问题讨论】:

  • 你能贴出你用来检查元数据值的代码吗?
  • 我的代码在这里 bpaste.net/show/172997 但无法获取元数据,我仍然不知道如何获取它,我真的想要一些示例代码来获取 a{sv} 数据

标签: glib dbus


【解决方案1】:

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

替代品是提供high levellow level API 的GDBus(GLib 中的D-Bus 支持)。我强烈建议迁移过来,因为新 API 提供的方法使使用 DBus 变得更加容易。

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

The API Reference 充满了好东西。如果上述方法不起作用,请检查那里。希望有帮助

【讨论】:

  • 他使用的是 dbus-glib,而不是 gdbus。
  • 非常感谢!我不知道 dbus-glib 已经过时了,我混合了 dbus-glib 和 GDBus,我现在可以使用此代码获取元数据 bpaste.net/show/173369
猜你喜欢
  • 2018-03-10
  • 2019-01-10
  • 1970-01-01
  • 1970-01-01
  • 2012-02-09
  • 2012-06-16
  • 1970-01-01
  • 2014-10-31
  • 2021-06-30
相关资源
最近更新 更多