8

我只是尝试运行一个 vala bluez 示例(在DbusClientSamples页面中找到),我收到了这个错误:

GDBus.Error:org.freedesktop.DBus.Error.UnknownObject:
Method "DiscoverDevices" with signature "" on interface "org.bluez.Adapter"
doesn't exist

示例是否使用了已弃用的 API?如果是,我在哪里可以找到有关 bluez 的 DBUS API 的更新文档?我(通过谷歌搜索)找到的所有文档都包含该DiscoverDevices方法,所以我很困惑。

4

3 回答 3

11

AFAICT org.bluez.Adapter 消失了(我在运行 bluez-5.12 的 Fedora 20 系统上看不到它)。取而代之的是org.bluez.Adapter1您可以在https://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc获取 bluez D-Bus API 的所有最新文档

于 2014-01-16T06:37:57.553 回答
5

获取 BlueZ DBus 文档的最佳方法是从BlueZ 网站下载源代码,解压缩,然后查看doc目录。所有当前的 DBus API 都在此处列出。

我最近一直在使用这些文件。你可以要求更好,但它们已经足够好了。这是最明显的,并且解释了最不明显的问题。

于 2016-07-14T18:28:57.193 回答
1

BlueZ官方网站还提供了一篇关于BlueZ 5 API 介绍和移植指南的博文,其中提供了一些关于其 DBus API 的描述。他们在页面顶部写道:

与 BlueZ 4 相比,BlueZ 5 D-Bus API 包含重大变化。大部分变化是由于 BlueZ 5 中的以下特性:

  • ...
  • 接口版本的介绍(例如org.bluez.Adapter1)。当引入新版本时,我们将尝试同时支持至少两个最新版本。
  • ...

有一节讨论 DBus 对象管理器:

相反,应用程序将通过执行ObjectManager.GetManagedObjects调用来发现可用的适配器,并使用“<code>org.bluez.Adapter1”接口查找任何返回的对象。

此外,除了检查docsBlueZ 源代码的目录(如thisthis答案中所述),我发现检查目录中的示例源代码也很有帮助testhttps://git.kernel.org/pub /scm/bluetooth/bluez.git/tree/test)。

以下是示例广告代码的部分内容:

BLUEZ_SERVICE_NAME = 'org.bluez'
LE_ADVERTISING_MANAGER_IFACE = 'org.bluez.LEAdvertisingManager1'
DBUS_OM_IFACE = 'org.freedesktop.DBus.ObjectManager'
DBUS_PROP_IFACE = 'org.freedesktop.DBus.Properties'

...

def main(timeout=0):
    ...
    adapter_props = dbus.Interface(bus.get_object(BLUEZ_SERVICE_NAME, adapter),
                                   "org.freedesktop.DBus.Properties")

    adapter_props.Set("org.bluez.Adapter1", "Powered", dbus.Boolean(1))
于 2020-08-04T06:37:11.980 回答