【问题标题】:Android - SPP UUID for Nexus One running Android 2.3.6Android - 运行 Android 2.3.6 的 Nexus One 的 SPP UUID
【发布时间】:2012-09-29 10:24:06
【问题描述】:

我正在使用我的 Android 应用程序中的 getUuids() 调用向 Nexus One 查询 UUID,我看到返回以下内容:

 0 th UUID found is 00001105-0000-1000-8000-00805f9b34fb
 1 th UUID found is 00001106-0000-1000-8000-00805f9b34fb
 2 th UUID found is 0000110a-0000-1000-8000-00805f9b34fb
 3 th UUID found is 0000110c-0000-1000-8000-00805f9b34fb
 4 th UUID found is 00001112-0000-1000-8000-00805f9b34fb
 5 th UUID found is 0000111f-0000-1000-8000-00805f9b34fb
 6 th UUID found is 0000112f-0000-1000-8000-00805f9b34fb
 7 th UUID found is 00001200-0000-1000-8000-00805f9b34fb

我的问题是:为什么我无法在此列表中看到 SPP 的标准 UUID (00001101-0000-1000-8000-00805f9b34fb)?

我已经测试过,我可以使用 S2 蓝牙终端应用程序将串行数据从 android 设备 (Xoom) 发送到这款 Nexus One 手机。此数据传输中使用的是什么 UUID?

【问题讨论】:

    标签: android spp


    【解决方案1】:

    S2 Bluetooth Terminal 应用程序使用00001101-0000-1000-8000-00805F9B34FB 硬编码(检查smali)。

    注意以下几点:

    • 看着the docs for getUuids(),我注意到:

      此方法不会启动服务发现过程以从远程设备检索 UUID。而是返回服务 UUID 的本地缓存副本。如果需要新的 UUID,请使用 fetchUuidsWithSdp()。

      你试过fetchUuidsWithSdp()吗?

    • S2 Bluetooth Terminal 虽然很有用,但并不是真正的 SDP 调试工具。就个人而言,我宁愿尝试使用BlueZ 实用程序(或类似的工具,如果在 Windows 上 - 但我在这里推荐 Linux)来查看设备实际宣传的服务。这样,您就可以(至少)将问题缩小到其中一台设备。

      编辑:在 Windows 上,您可以使用 Bluetooth Network Scanner

    以下是如何使用 BlueZ 工具(本示例使用 GPS 接收器)扫描服务的小示例:

    czajnik@lapcio:~$ hcitool scan
    Scanning ...
        00:1C:88:11:0E:CC   PENTA-GPS
    czajnik@lapcio:~$ sdptool  browse 00:1C:88:11:0E:CC
    Browsing 00:1C:88:11:0E:CC ...
    Service Name: SPP Slave
    Service RecHandle: 0x10000
    Service Class ID List:
      "Serial Port" (0x1101)
    Protocol Descriptor List:
      "L2CAP" (0x0100)
      "RFCOMM" (0x0003)
        Channel: 1
    Language Base Attr List:
      code_ISO639: 0x656e
      encoding:    0x6a
      base_offset: 0x100
    

    【讨论】:

    • 谢谢@CodePainters。我能够使用 fetchUuidswithSdp() 验证标准 SPP UUID 未针对此手机进行广告。 Xoom 如何通过 S2 蓝牙终端向 Nexus 设备发送数据。它正在使用其他蓝牙配置文件吗?
    • 确实是个好问题。但同样 - 我会先消除 Android 客户端,然后使用我的 PC 扫描服务列表以查看真正宣传的内容。 fetchUuidswithSdp() 没有返回您的服务并不足以说明该服务没有被宣传——它可能是客户端的一个错误。如果你在 Windows 上,试试这个:medieval.it/bluescan-pc/menu-id-72.html
    • 另外,您可能会发现这很有用:stackoverflow.com/questions/9405575/…
    • 另一个想法:你试过直接打电话给createRfcommSocketToServiceRecord()createInsecureRfcommSocketToServiceRecord()吗?这就是 S2 Bluetooth Terminal 所做的,它从不扫描广告的 UUID。
    • 再次感谢@CodePainters。 “bluescan”软件​​是个不错的建议。我将它安装在 Windows 上并验证了标准 SPP UUID 1101-xxxx-.... 从列表中丢失,并且该列表与我在原始问题中粘贴的相同。我曾尝试直接调用 createRfcommSocketToServiceRecord() ,但事实证明这也没用。我不会尝试查看 SPP UUID 是否作为属性嵌套在上面给出的 UUID 列表下。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多