![](/img/trans.png)
[英]How to register connection callbacks with Bluez Profile1 DBus API
[英]Updated Bluez DBUS-API document?
我只是尝试运行一个 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
方法,所以我很困惑。
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 的所有最新文档
获取 BlueZ DBus 文档的最佳方式是从BlueZ 网站下载源代码,解压缩,然后在doc
目录中查找。 所有当前的 DBus API 都列在那里。
我最近经常使用这些文件。 你可以要求更好,但他们已经足够好了。 这是最明显的,并且解释了最不明显的问题。
BlueZ官方站点还提供了BlueZ 5 API 介绍和移植指南的博客文章,其中提供了有关其 DBus API 的一些描述。 他们在页面顶部写道:
与 BlueZ 4 相比,BlueZ 5 D-Bus API 包含重大更改。大部分更改是由于 BlueZ 5 中的以下功能:
- ...
- 接口版本介绍(例如
org.bluez.Adapter1
)。 当引入新版本时,我们将尝试同时支持至少两个最新版本。- ...
有一节讨论了 DBus 对象管理器:
相反,应用程序将通过执行
ObjectManager.GetManagedObjects
调用来发现可用的适配器,并使用“org.bluez.Adapter1
”接口查找任何返回的对象。
此外,除了查看 BlueZ 源代码的docs
目录(如this和this答案中所述),我发现检查test
目录中的示例源代码也很有帮助( https://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))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.