2012-07-12 58 views
0

我尝试打开一个套接字来侦听来自非android设备的连接。Obex推送配置文件的UUID

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对象推送模式的UUID。我认为这是因为该设备的制造商告诉我该设备仅支持协议:Obex Push Profile。

当我尝试在我Parcelable[]阵列访问例如第二元素,输出只会

07-12 13:29:36.305: E/AndroidRuntime(6293): java.lang.ArrayIndexOutOfBoundsException: length=1; index=1 

通过,我可以肯定地说,我的阵列只包含一个对象

因此,以更多的Android特定蓝牙的东西。

我'使用这个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

这似乎是在某些设备上间歇性发生的低级别蓝牙问题,大多数遇到此异常的人员通过重新启动设备或更新固件后解决了这个问题。 – BFil 2012-07-16 09:47:36

+0

感谢您的回答,ShadowCloud!我试过重新启动手机和蓝牙设备,但没有帮助。不管怎么说,还是要谢谢你。 – 2012-07-17 11:01:57

回答

1

所以,如果有人是好奇,还是面临着同样的问题,因为我所做的,这里是解决方案:

错误:Not able to register SDP record for: "name of the device"会因为你试图用AA UUID创建一个服务被抛出这已经被采用了。在这种情况下,我想注册自己的服务,与同UUIDObex 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(); 

Remeber,这是一个阻塞调用,因此对于自己和你的用户请把这个放在thread

那么为什么heck没有将我的设备连接到android服务器?

  1. 你确定远程设备/客户端使用相同的UUID作为服务器?

  2. 如果您不能指定远程设备的UUID,请联系制造商,或许我们已经足够向您发送配置文件了,这是我的情况。

如果有任何问题,请在此贴文中添加评论。我会接受这个答案,因为没有人能够解决这个问题。

+0

非常感谢您的回答有帮助。我的应用成功第一次使用UUID连接到其他设备,但之后它重复抛出异常,可能是因为我没有正确关闭套接字。有什么方法可以扫描SDP数据库并删除该条目? – 2014-06-17 08:55:13