我试图实现一个Android应用程序从医疗设备接收数据,但我无法通过发现过程,并获得手机和设备配对或连接到对方。
描述医疗设备:设备使用服务发现协议(SDP)和串行端口configuration文件(SPP)。 它启动一个查询程序,发现(最多10个)具有匹配CODfilter和服务名称的周边接入点。 然后通过检查PIN顺序地build立与接入点的连接(使用Page Procedure)。 一旦PIN匹配,数据就会上传。 在上传数据时,设备等待确认。 决心是主人,发起沟通。
我无法控制医疗设备。 我所能做的就是启动它,并等待上述过程(测量之后)。
Android应用程序:我已经从开发者页面上的蓝牙聊天示例开始了。 到目前为止,我已经使用00001101-0000-1000-8000-00805f9b34fb
replace了UUID以使用SPP并将服务名称设置为适当的名称。 通过检查电脑的服务,我可以确认这似乎是正确的。 由于医疗设备是查询和启动通信的设备,我的服务正在使用BluetoothServerSocket
和accept()
方法来开始监听。
在我读过的开发者页面中,UUID必须匹配试图通信的应用程序。 由于我不能为医疗设备设置任何UUID,我想知道这是否会出现问题,或者医疗设备是否足以使用SPconfiguration文件?
如果服务名称和UUID是正确的,并且医疗设备实际上会尝试连接到正在监听连接的蓝牙服务,Android系统是否会提示我手动inputPIN以便能够配对设备(因为医疗设备有预先设定的PIN码)?
我在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上完全不同的格式描述。
可以在Android上使用除UUID之外的其他格式使用服务类别ID吗?
你可以操纵在服务发现数据库中注册的服务logging吗?
是否有可能以某种方式直接实施BlueZ,使用本地开发的C / C ++?
/弗雷德里克
如果您可以提供医疗设备的名称/链接(如果它是商业设备),则可能会帮助阅读其指南,以便更多地了解可能发生的事情。 这里有几点build议:
除了串行端口UUID之外,SPP上的每项服务都可以具有自定义的特定UUID – 例如,医疗设备可以使用此特定于用户的UUID查找与之兼容的服务。
如果医疗设备当前成功连接到PC或其他接入点并传输数据,则可以尝试读取该设备的SDPlogging,并确定除了正在使用的SPP UUID之外还有哪些特定的UUID,并使用同样在你的应用程序也。
如果医疗设备无法find您的手机/应用程序,可能是因为它是不可发现的。 Android设备默认情况下是不可发现的,即使您是服务器,也只能连接并且无法发现,您可以尝试通过编程或通过设置使其可被发现,并查看医疗设备是否可以find您的设备。 看到这里 – 在Android中启用发现
对于PIN配对,android设备应该在非配对设备尝试连接时启动配对过程,您可以在完成build议(1)和(2)后尝试配对,如果其中一个设备是PIN配对在版本蓝牙2.1之前,即使使用较新的设备,也需要在手机上进行一些用户干预/确认的6位密码,以允许进行配对(这只是一个很好的安全策略,不允许在没有用户的情况下自动发生干预),希望配对只会在第一次连接发生时需要,后来不需要任何用户干预以后的连接。