答案 0 :(得分:7)
好的,我遇到了同样的问题,但我想我可以回答你的一些问题。如果您的PC打开SPP端口,例如,通过使用“sdptool add --channel = 3 SP”,您的Android手机将是客户端打开套接字并将此套接字连接到服务器(您的PC或任何其他蓝牙设备,例如,GPS,鼠标等)。
您可以通过阅读文章 Bluetooth 来获取此信息,我从这篇文章中删除了客户的定义。
如果您在服务器(PC等)上打开SPP端口,则表示您提供标准服务,并且为此服务分配了一个特殊的UUID。如果我没弄错的话,这将是:00001101-0000-1000-8000-00805F9B34FB
。
所以我认为我们应该从Android开发者那里得到一个合格的答案。或者在IRC办公时间周四问这个问题。
答案 1 :(得分:4)
提示:如果要连接蓝牙串行板,请尝试使用众所周知的SPP UUID 00001101-0000-1000-8000-00805F9B34FB。但是,如果您要连接到Android对等设备,请生成您自己的唯一UUID。
答案 2 :(得分:2)
虽然它可能是您的UUID,但我还建议您确保蓝牙MAC准确且大写。
我还建议在Linux机器上的终端中运行hcidump -X
,看看在整个过程中是否可以看到Linux机器和手机之间的任何双向流量。
答案 3 :(得分:2)
我找到了一种确保在设备上找到UUID的方法。在客户端,device.createRfcommSocketToServiceRecord(uuid);
之前添加:
Process process = Runtime.getRuntime().exec("su -c 'sdptool records " + device.getAddress() + "'");
process.waitFor();
该过程在20-30秒内被冻结,因为Android正在获取服务。但之后,如果服务器处于发现模式(如果服务器是Android手机),则连接每次都成功!
答案 4 :(得分:1)
在第一次连接后重新连接SPP时遇到了同样的问题。
这是因为rfcomm channel=-1
中的BluetoothService.java
。我将updateDeviceServiceChannelCache()
添加到fetchRemoteUuids()
的末尾,然后就可以了!
答案 5 :(得分:0)
这件事主要发生在HTC。我遇到了同样的问题。如果您第一次成功连接但之后失败,只需重新启动手机,失败的服务将重新启动。