我尝试打开一个套接字,用于侦听来自非Android设备的连接。
Parcelable[] uuidExtra = device.getUuids();
String t = uuidExtra[0].toString();
t = t.toUpperCase();
Log.i("UUID: ", t);
这个codesnippet将为我提供我的蓝牙设备提供的服务的UUID。 LogCat的输出是:
00001105-0000-1000-8000-00805F9B34FB
我认为是Obex Object推送配置文件的UUID。我假设这是因为该设备的制造告诉我该设备仅支持协议:Obex Push Profile。
当我尝试访问Parcelable[]
数组中的第二个元素时,输出只会是
07-12 13:29:36.305: E/AndroidRuntime(6293): java.lang.ArrayIndexOutOfBoundsException: length=1; index=1
我可以肯定地说我的数组只包含一个对象。
所以更多的特定于蓝牙的东西。
我这样使用这个UUID:
try {
tmp = adapter.listenUsingRfcommWithServiceRecord(device.getName(), UUID.fromString(t));
} catch (IOException e) {
Log.e(TAG, "FAILED BECAUSE: " + e.getMessage()); }
该异常将以下内容输出到LogCat:
FAILED BECAUSE: Not able to register SDP record for: "name of the device"
在谷歌搜索此异常几个小时之后,我仍然无法弄清楚如何为我的设备打开监听套接字。
有什么建议吗?提前致谢!
答案 0 :(得分:1)
因此,如果有人对此感到好奇,或者面临与我相同的问题,那么这就是解决方案:
错误:Not able to register SDP record for: "name of the device"
将被抛出,因为您正在尝试创建一个已经采用UUID
的服务。在这种情况下,我尝试使用与UUID
Obex Object Push
注册我自己的服务
我必须做的是使用自定义UUID注册我自己的服务,例如
d1b180c0-d7bc-11e1-9b23-0800200c9a66
此UUID是从this 网页生成的。至于现在你已经创建了一个新的侦听套接字:
try {
tmp = adapter.listenUsingInsecureRfcommWithServiceRecord("My Profile", UUID.fromString("d1b180c0-d7bc-11e1-9b23-0800200c9a66"));
} catch (IOException e) {
Log.e("FAILED BECAUSE:", e.getMessage());
}
mmServerSocket = tmp;
现在我们已经准备好以这种方式接受命令请求:
socket = mmServerSocket.accept();
记住,这是一个阻止通话,因此对于您自己和您的用户,请将其放在thread
。
那么为什么我的设备没有连接到Android服务器?
您确定远程设备/客户端使用与服务器相同的UUID吗?
如果你不能指定远程设备的UUID,请联系制造商,或者很好的发送给你一个配置文件,这是我的情况。
如果有任何问题,请在此帖子中添加评论。我会接受这个作为答案,因为没有人能解决这个问题。