Don*_*nic 3 debian android bluetooth sdp
蓝牙服务发现协议 (SDP) 守护进程在哪里?
我正在尝试使用 bluez 在 Debian V8.0 上注册蓝牙服务。我在https://people.csail.mit.edu/albert/bluez-intro/使用示例代码。一切顺利,直到我尝试
sdp_connect( BDADDR_ANY, BDADDR_LOCAL, 0 );
Run Code Online (Sandbox Code Playgroud)
这失败了。经过一番挖掘,我发现 sdp 守护进程 (sdpd)(它需要连接到它)没有运行,实际上我的系统上甚至不存在。
我试过的:
我的目标:
我正在尝试在我的 Debian 系统上注册我的服务,以便我可以从另一个蓝牙设备(特别是我的 Android)连接到它。该服务运行良好,只是没有 SDP 注册就无法找到它。
我很乐意使用它的(已知)频道号直接连接到它,但 Android 只能通过注册服务 UUID(即使用BluetoothDevice.createRfcommSocketToServiceRecord(uuid))进行连接,但我看不到连接到频道的API 。
有趣的是,我可以通过channel number连接到 Android 上的服务,但反过来不行。我认为 sdpd 可能已经过时了——所有对它的引用都已经有好几年了。
来自官方bluez 项目网站:
与 BlueZ 4 相比,BlueZ 5 D-Bus API 包含重大更改。大部分更改是由于 BlueZ 5 中的以下功能:
- 转换为使用标准 D-Bus 属性和 ObjectManager 接口(可在 D-Bus 规范文档中找到)
- 接口版本介绍(例如 org.bluez.Adapter1)。当引入新版本时,我们将尝试同时支持至少两个最新版本。
- 简化或删除每个配置文件接口并添加通用 org.bluez.Device1.Connect 方法来连接配置文件。
- 移除 org.bluez.Service 接口(用于注册 SDP 记录和授权)并引入新的 org.bluez.Profile1 接口
- 设备发现期间动态设备对象创建
- AgentManager1接口介绍
- 基本路径移动到“/org/bluez”。尽管通过 D-Bus 进行任何交互的主要入口点是 ObjectManager.GetManagedObjects 调用,但这应该没有太大区别。
简而言之,从 Bluez5 开始,您不能使用sdp_connect() 之类的函数。您必须使用 D-Bus。在上面链接的页面中,您还可以找到以下内容:
BlueZ 5 引入了一个新的通用 D-Bus 接口来实现外部配置文件。配置文件(驻留在单独的进程中)实现了 org.bluez.Profile1 接口,并通过 BlueZ 端的新 ProfileManager1 接口注册了一个实现它的对象。在 RegisterProfile 方法中(在 ProfileManager1 接口上),配置文件至少需要为要注册的配置文件提供 UUID。BlueZ 内部有一个常见配置文件的默认值表,因此不需要其他信息。但是,如果配置文件需要,它可以提供诸如完整 SDP 记录(XML 编码)、所需安全级别、启用/禁用授权、版本、功能、角色、名称等信息。
......以及许多宝贵的信息。
请不要使用兼容模式(我的意思是“--compat”选项)。您应该仅将其用于测试和开发:
commit 83b21cc152186f12f8bc76b7aec3107e220d5219
Author: Marcel Holtmann <marcel@holtmann.org>
Date: Mon Dec 17 14:02:59 2012 +0100
core: Hide /var/run/sdp support behind command line option
By default /var/run/sdp support has been disabled from now on. It is not
the preferred way of handling SDP records. For testing and development
purposes it can be switched back on via --compat command line option.
Run Code Online (Sandbox Code Playgroud)
最后但并非最不重要的一点是,这里有一系列有用的链接,可以帮助使用 Bluez5 的新用户/开发人员:
| 归档时间: |
|
| 查看次数: |
2227 次 |
| 最近记录: |