我只是尝试运行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
方法,所以我很困惑。
答案 0 :(得分:8)
AFAICT org.bluez.Adapter消失了(我在我的Fedora 20系统上看不到它,运行bluez-5.12)。取而代之的是org.bluez.Adapter1。您可以在https://git.kernel.org/cgit/bluetooth/bluez.git/tree/doc
获取bluez D-Bus API的所有最新文档答案 1 :(得分:2)
获取BlueZ DBus文档的最佳方法是从BlueZ web site下载源代码,将其解压缩,然后查看doc
目录。所有当前的DBus API都列在那里。
我最近一直在使用这些文件。你可以要求更好,但他们已经足够好了。这是最明显的,并解释了最明显的问题。
答案 2 :(得分:0)
官方BlueZ网站还提供了BlueZ 5 API introduction and porting guide的博客文章,其中提供了有关其DBus API的一些说明。他们在页面顶部写道:
与BlueZ相比,BlueZ 5 D-Bus API包含重大更改 4.大部分更改归因于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)中的代码。
以下是example-advertisement代码的一部分:
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))