Obex推送配置文件的UUID

时间:2012-07-12 11:34:35

标签: android

我尝试打开一个套接字,用于侦听来自非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" 

在谷歌搜索此异常几个小时之后,我仍然无法弄清楚如何为我的设备打开监听套接字。

有什么建议吗?提前致谢!

1 个答案:

答案 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服务器?

  1. 您确定远程设备/客户端使用与服务器相同的UUID吗?

  2. 如果你不能指定远程设备的UUID,请联系制造商,或者很好的发送给你一个配置文件,这是我的情况。

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