蓝牙设备通信方法及装置的制造方法
【技术领域】
[0001]本发明涉及通信领域,具体而言,涉及一种蓝牙设备通信方法及装置。
【背景技术】
[0002]安卓(Android)从版本4.3 (API 18)开始支持蓝牙低能耗(BLE)技术,并提供了用于应用程序查找设备、查询服务及和读/写特的接口,使用BLE显著减少了在设备间连接和传输数据的功耗,这使得Android应用程序与具有低功耗的要求BLE设备进行通信,如近距离传感器、心脏速率显示器、健身设备等等。
[0003]BLE设备间是基于GATT协议来进行通信的,通信中涉及到Service、Characteristic及Descriptor,每个BLE设备包含多个Service,每个Service包含多个Characteristic,每个Characteristic又包含多个Descriptor。当扫描到需要连接的BLE设备后,需要通过唯一标识符(Universally Unique Identifier,UUID)确认唯一的需要连接的Service,在通过UUID来获取读取、写入、通知的Characteristic,获取到所需的三个Characteristic后,需要从通知Characteristic中通过UUID获取通知的Descriptor,告诉设备在有数据变化后需要通知应用程序。
[0004]以上对BLE设备(下文中称为蓝牙设备)之间通信的描述中所有数据的传输全是通过广播完成的,Android的API中只记载了简单的使用过程,而对重复请求、一个请求没有处理完成就发起另一个请求、请求超时等都没有提供解决方案,所以按照Android提供的API来进行开发时,在一些由于代码问题或者其它异常情况时显得捉襟见肘。
【发明内容】
[0005]本发明的主要目的在于公开了一种蓝牙设备通信方法及装置,以至少解决相关技术中蓝牙设备之间通信,存在重复请求、一个请求没有处理完成就发起另一个请求的问题。
[0006]根据本发明的一个方面,提供了一种蓝牙设备通信方法。
[0007]根据本发明的蓝牙设备通信方法包括:当本端的蓝牙设备发起通信请求时,将上述通信请求与当前队列中的请求进行对比,确定上述队列中是否存在与上述通信请求相同的请求;如果上述队列中不存在与上述通信请求相同的请求,则将上述通信请求插入上述队列中等待执行;判断当前是否存在未完成的请求,在不存在未完成的请求时,从上述队列的栈底将待执行请求取出并执行,启动线程开始与对端的蓝牙设备通信。
[0008]根据本发明的另一方面,提供了一种蓝牙设备通信装置。
[0009]根据本发明的蓝牙设备通信装置包括:对比模块,用于当本端的蓝牙设备发起通信请求时,将上述通信请求与当前队列中的请求进行对比,确定上述队列中是否存在与上述通信请求相同的请求;插入模块,用于在上述队列中不存在与上述通信请求相同的请求时,将上述通信请求插入上述队列中等待执行;第一处理模块,用于判断当前是否存在未完成的请求,在不存在未完成的请求时,从上述队列的桟底将待执行请求取出并执行,启动线程开始与对端的蓝牙设备通信。
[0010]通过本发明,采用本发明提供的技术方案,有效地解决了因发起重复请求造成的设备回调多次响应给调用者,造成调用者无法区分是哪一次请求结果的问题。此外,也解决了一个请求还未完成就发起另一个请求导致设备测量失败问题。
【附图说明】
[0011]图1是根据本发明实施例的蓝牙设备通信方法的流程图;
[0012]图2是根据本发明优选实施例的蓝牙设备通信方法的流程图;
[0013]图3是根据本发明实施例的蓝牙设备通信装置的结构框图;以及
[0014]图4是根据本发明优选实施例的蓝牙设备通信装置的结构框图。
【具体实施方式】
[0015]下面结合说明书附图对本发明的具体实现方式做一详细描述。
[0016]图1是根据本发明实施例的蓝牙设备通信方法的流程图。如图1所示,该蓝牙设备通信方法包括:
[0017]步骤SlOl:当本端的蓝牙设备发起通信请求时,将上述通信请求与当前队列中的请求进行对比,确定上述队列中是否存在与上述通信请求相同的请求;
[0018]步骤S103:如果上述队列中不存在与上述通信请求相同的请求,则将上述通信请求插入上述队列中等待执行;
[0019]步骤S105:判断当前是否存在未完成的请求,在不存在未完成的请求时,从上述队列的栈底将待执行请求取出并执行,启动线程开始与对端的蓝牙设备通信。
[0020]采用图1所示的方法,有效地解决了因发起重复请求造成的设备回调多次响应给调用者,造成调用者无法区分是哪一次请求结果的问题。此外,也解决了一个请求还未完成就发起另一个请求导致设备测量失败问题。
[0021 ] 其中,上述蓝牙设备可以为近距离传感器、心脏速率显示器、健身设备等。
[0022]优选地,在步骤S105中,启动线程开始与对端的蓝牙设备通信时,还包括以下处理:启动定时器;在上述定时器超时前,判断是否收到上述对端的蓝牙设备返回的数据;在接收到上述响应时,将上述待执行请求从上述队列中移除,重置上述定时器,回调上述对端的蓝牙设备返回的数据。
[0023]优选地,在启动上述定时器之后,还可以包括以下处理:通过检测确定上述定时器超时;将上述待执行请求从上述队列中移除,并回调请求超时。
[0024]优选地,上述蓝牙设备可以为以下至少之一:近距离传感器、心脏速率显示器、健身设备。
[0025]在优选实施过程中,当本端的蓝牙设备的应用程序扫描到蓝牙设备后开始发起通信请求,当接收到一个请求时管理器将它与现有请求队列中的请求进行对比,如果队列中存在同一个未完成的请求则不将请求放入队列中,否则将请求加入队列中等待执行。在管理器中接收到第一个请求时启动一个线程,用于执行该请求,在管理器中设置一个定时器(Timer)用于定时检查请求的执行情况,如果达到规定的超时前应用接收到设备回应则将请求从队列中移除并且重置Timer,然后将数据回调给调用者;如果达到设置的超时时间仍没有收到设备回应,则将请求从队列中移除并回调请求超时给调用者。
[0026]以下结合图2进一步描述上述优选实施方式。
[0027]图2是根据本发明优选实施例的蓝牙设备通信方法的流程图。如图2所示,该蓝牙设备通信方法包括:
[0028]步骤S201:管理器收到通信请求。
[0029]步骤S203:管理器将该通信请求与当前队列中的请求进行对比,确定上述队列中是否存在与上述通信请求相同的请求。如果是,执行步骤S207,否则,执行步骤S205。
[0030]步骤S2