Android和其他设备之间的蓝牙SPP,UUID和PIN问题

我试图实现一个Android应用程序从医疗设备接收数据,但我无法通过发现过程,并获得手机和设备配对或连接到对方。

描述医疗设备:设备使用服务发现协议(SDP)和串行端口configuration文件(SPP)。 它启动一个查询程序,发现(最多10个)具有匹配CODfilter和服务名称的周边接入点。 然后通过检查PIN顺序地build立与接入点的连接(使用Page Procedure)。 一旦PIN匹配,数据就会上传。 在上传数据时,设备等待确认。 决心是主人,发起沟通。

我无法控制医疗设备。 我所能做的就是启动它,并等待上述过程(测量之后)。

Android应用程序:我已经从开发者页面上的蓝牙聊天示例开始了。 到目前为止,我已经使用00001101-0000-1000-8000-00805f9b34fbreplace了UUID以使用SPP并将服务名称设置为适当的名称。 通过检查电脑的服务,我可以确认这似乎是正确的。 由于医疗设备是查询和启动通信的设备,我的服务正在使用BluetoothServerSocketaccept()方法来开始监听。

  1. 在我读过的开发者页面中,UUID必须匹配试图通信的应用程序。 由于我不能为医疗设备设置任何UUID,我想知道这是否会出现问题,或者医疗设备是否足以使用SPconfiguration文件?

  2. 如果服务名称和UUID是正确的,并且医疗设备实际上会尝试连接到正在监听连接的蓝牙服务,Android系统是否会提示我手动inputPIN以便能够配对设备(因为医疗设备有预先设定的PIN码)?

  3. 我在Android SDK API中没有发现任何东西,可以让我为我的蓝牙服务设置一个PIN(如果这是失败的地方),这可能吗?

我已经读过,通常PIN是由系统生成的,用户确认是唯一需要的。 我猜不是在我的系统中,因为设备有点旧了。

如果你想分享一些与我上面描述的有关的知识,提示和猜测,我会很感激的。

在此先感谢Fredrik


编辑:

现在我已经把这个设备与一个bluegiga盒子配对了,他们正确的沟通。 现在我正在寻找血压设备连接到我的手机的标准。 我可以从Linux计算机(terminal中的sdptool search SP )检查bluegiga提供的蓝牙服务,并将其与我在Android上提供的蓝牙服务进行比较。 这些值是我得到的:

〜$ sdptoolsearchSP

查询 …

在8C:71:F8:E5:XX:XX上searchSP。 。 。

服务名称:1808130054

服务RecHandle:0x10003

服务类别ID列表:

UUID 128:00001101-0000-1000-8000-00805f9b34fb

协议描述符列表:

“L2CAP”(0x0100)

“RFCOMM”(0x0003)

频道:13

在00:07:80:88:XX:XX寻找SP 。 。

服务名称:1808130054

服务说明:1808130054

服务RecHandle:0x10005

服务类别ID列表:

“串行端口”(0x1101)

协议描述符列表:

“L2CAP”(0x0100)

“RFCOMM”(0x0003)

频道:12

语言基础列表:

code_ISO639:0x656e

使用:0x6a

base_offset:0x100

find的第一个设备是手机(mac = 8C:71 …谷歌Nexus S),第二个(mac = 00:07 …)是bluegiga 。 我注意到Android设备上没有服务描述。 我认为最重要的区别是服务类别ID列表。 Android上的UUID 128,但在bluegiga上完全不同的格式描述。

  1. 可以在Android上使用除UUID之外的其他格式使用服务类别ID吗?

  2. 你可以操纵在服务发现数据库中注册的服务logging吗?

  3. 是否有可能以某种方式直接实施BlueZ,使用本地开发的C / C ++?

/弗雷德里克

Solutions Collecting From Web of "Android和其他设备之间的蓝牙SPP,UUID和PIN问题"

如果您可以提供医疗设备的名称/链接(如果它是商业设备),则可能会帮助阅读其指南,以便更多地了解可能发生的事情。 这里有几点build议:

  1. 除了串行端口UUID之外,SPP上的每项服务都可以具有自定义的特定UUID – 例如,医疗设备可以使用此特定于用户的UUID查找与之兼容的服务。
    如果医疗设备当前成功连接到PC或其他接入点并传输数据,则可以尝试读取该设备的SDPlogging,并确定除了正在使用的SPP UUID之外还有哪些特定的UUID,并使用同样在你的应用程序也。

  2. 如果医疗设备无法find您的手机/应用程序,可能是因为它是不可发现的。 Android设备默认情况下是不可发现的,即使您是服务器,也只能连接并且无法发现,您可以尝试通过编程或通过设置使其可被发现,并查看医疗设备是否可以find您的设备。 看到这里 – 在Android中启用发现

  3. 对于PIN配对,android设备应该在非配对设备尝试连接时启动配对过程,您可以在完成build议(1)和(2)后尝试配对,如果其中一个设备是PIN配对在版本蓝牙2.1之前,即使使用较新的设备,也需要在手机上进行一些用户干预/确认的6位密码,以允许进行配对(这只是一个很好的安全策略,不允许在没有用户的情况下自动发生干预),希望配对只会在第一次连接发生时需要,后来不需要任何用户干预以后的连接。