13

我正在编写一个能够与我的 PC 通信的应用程序。我使用了 SDK 2.1 的蓝牙功能。

我可以找到设备,获取它们的 MAC 地址,创建一个RFCOMM套接字,但是当我开始连接时,我收到以下错误消息。

服务发现失败。

  1. 是因为UUID在我的应用程序和我的 PC 上不一样吗?
  2. 如何在我的 PC 上获得正确的 UUID?

如果我编写这样的应用程序,我的Nexus One是客户端还是服务器?

4

6 回答 6

7

好的,我遇到了同样的问题,但我想我可以回答你的一些问题。如果您的 PC 打开了 SPP 端口,例如,通过使用“sdptool add --channel=3 SP”,您的 Android 手机将成为客户端打开套接字并通过此套接字连接到服务器(您的 PC 或任何其他蓝牙设备,例如,GPS、鼠标等)。

您可以通过阅读文章蓝牙获得此信息,我从本文中取出客户端的定义。

如果您在服务器(您的 PC 等)上打开 SPP 端口,则您提供的是标准服务,并且为该服务分配了一个特殊的 UUID。这将是:00001101-0000-1000-8000-00805F9B34FB如果我没记错的话。

所以我认为我们应该从安卓开发者那里得到一个合格的答案。或者在周四 IRC 办公时间问这个问题。

于 2010-03-20T21:33:28.957 回答
4

提示:如果您要连接到蓝牙串行板,请尝试使用众所周知的 SPP UUID 00001101-0000-1000-8000-00805F9B34FB。但是,如果您要连接到 Android 对等体,请生成您自己的唯一 UUID。

链接

于 2012-03-06T18:45:27.247 回答
2

我找到了一种方法来确保在设备上找到 UUID。在客户端,在device.createRfcommSocketToServiceRecord(uuid);添加之前:

Process process = Runtime.getRuntime().exec("su -c 'sdptool records " + device.getAddress() + "'");
process.waitFor();

该过程在 20-30 秒内被冻结,因为 Android 正在获取服务。但是之后,如果服务器处于发现模式(如果服务器是Android手机),则每次连接都成功!

于 2011-12-04T18:10:59.497 回答
2

虽然它可能是您的 UUID,但我也建议您确保蓝牙 MAC 是准确的且大写的。

我还建议hcidump -X在 Linux 机器上的终端中运行,看看你是否可以在整个过程中看到你的 Linux 机器和手机之间的任何双向流量。

于 2010-05-17T17:04:35.050 回答
1

在第一次连接后重新连接 SPP 时我遇到了同样的问题。

这是因为rfcomm channel=-1BluetoothService.java. 我添加updateDeviceServiceChannelCache()到末尾fetchRemoteUuids(),然后它工作了!

于 2011-06-16T06:51:48.560 回答
0

这件事主要发生在HTC身上。我遇到了同样的问题。如果您第一次连接成功但后来失败,只需重新启动手机,失败的服务就会重新启动。

于 2013-04-02T17:51:30.867 回答