好吧,这就是交易。我有两部启用蓝牙的 Galaxy Nexus 手机。
我编写了一个蓝牙连接管理应用程序,用于设备发现和连接。它还输出设备可以支持的所有可用 UUID。
从http://www.bluetooth.org/Technical/AssignedNumbers/service_discovery.htm 查看以下标准 UUID 从 Galaxy Nexus 设备中公开。
- 0x1116 - 午睡
- 0x112f - PBAP(电话簿访问配置文件)
- 0x111f - HFP(免提)
- 0x1105 - OPP(对象推送配置文件)
- 0x1112 - HSP(耳机配置文件)
- 0x110c - AVRCP
- 0x110a - A2DP
我正在尝试通过 OPP 配置文件 ( UUID 00001105-0000-1000-8000-00805F9B34FB
) 连接并在设备之间推送对象(文件)。我已经阅读了有关如何发现、配对/绑定(线程等)和管理所有蓝牙连接的整个Android API 文档。我已经设法通过 SPP (0x1101) 配置文件成功连接并与旧版板设备通信。
但是,当我尝试socket.connect()
在两部 Galaxy nexus 手机之间使用时,会出现配对对话框,然后我单击Pair
两部设备上的按钮。之后,我立即得到一个Connection Refused IOException
. 请注意,在配对发生后,我再也不会被问到,这是有道理的,因为安全链接已被缓存。
如果我无法使用这些标准 UUID 连接到这些标准配置文件,为什么它们会暴露?如何从我的应用程序连接到任何这些配置文件并与它们交互?是因为我的应用程序不受信任吗?奇怪的是,即使是Share
Android 上的功能也根本不起作用。这在 Android 上完全被破坏了吗?
请避免像文档说的那样提示我使用“众所周知的 UUID SPP 一个 0x1101”。这不是我想要的。我对这些东西的工作原理有相当好的理解,我正在寻找一个真正的解决方案或问题的解释。
我已经看到了典型的“反射”解决方案,但我不明白为什么这在 Android 上仍然是一个问题?为什么人们使用反射来完成这项工作?我们可以在 Android 上提交一个错误来解决这个问题吗?
如果这些 UUID 是标准的,那么任何应用程序都应该能够连接它们并与之交互。为什么这是一个问题,为什么我会得到这个异常?
提前致谢。
更新
因此,出于某种原因,Android 系统中的对象推送开始起作用。我实际上试图通过我的应用程序进行连接,但它无法正常工作。然后,我去了联系人应用程序并尝试分享一个神奇的联系人。然后,我回到我的应用程序,现在它可以工作了......哇。这很奇怪,必须对此进行解释。