CN115065691B - 一种基于安卓平台的通讯实现方法及装置 - Google Patents
一种基于安卓平台的通讯实现方法及装置 Download PDFInfo
- Publication number
- CN115065691B CN115065691B CN202210990374.7A CN202210990374A CN115065691B CN 115065691 B CN115065691 B CN 115065691B CN 202210990374 A CN202210990374 A CN 202210990374A CN 115065691 B CN115065691 B CN 115065691B
- Authority
- CN
- China
- Prior art keywords
- data
- gatt
- server
- application program
- characteristic
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/104—Peer-to-peer [P2P] networks
- H04L67/1074—Peer-to-peer [P2P] networks for supporting data block transmission mechanisms
- H04L67/1078—Resource delivery mechanisms
- H04L67/108—Resource delivery mechanisms characterised by resources being split in blocks or fragments
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04W—WIRELESS COMMUNICATION NETWORKS
- H04W4/00—Services specially adapted for wireless communication networks; Facilities therefor
- H04W4/80—Services using short range communication, e.g. near-field communication [NFC], radio-frequency identification [RFID] or low energy communication
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D30/00—Reducing energy consumption in communication networks
- Y02D30/70—Reducing energy consumption in communication networks in wireless communication networks
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Mobile Radio Communication Systems (AREA)
Abstract
本发明公开一种基于安卓平台的通讯实现方法及装置,适用于蓝牙模式为从模式的服务端设备,该方法包括:服务端设备通过触发服务事件回调的写特征请求方法接收处理请求并对其解析,判断单线程池是否执行结束,否则保存解析结果,生成设备忙的错误响应数据并返回给客户端设备,继续执行当前操作,是则根据处理请求进行相应处理,并根据处理结果生成响应数据,当GATT服务中的GATT读特征被触发时,将响应数据作为参数置于服务事件回调的读特征请求方法中,触发服务事件回调的读特征请求方法将响应数据发送给客户端设备;或通过订阅特征改变方法将响应数据发送给客户端设备。本发明能保证数据的正常收发,使通讯更加稳定,使用更加方便快捷。
Description
技术领域
本发明涉及信息安全领域,尤其涉及一种基于安卓平台的通讯实现方法及装置。
背景技术
随着蓝牙技术的发展,因其具有灵活、便利等特点,应用在很多场合,且蓝牙连接方式逐渐代替了传统的串口或USB有线连接方式。两设备之间进行蓝牙通讯时,一台设备的蓝牙模式为主模式,另一台设备的蓝牙模式为从模式。蓝牙模式为主模式的设备搜索附近从模式的设备,发起配对请求,主模式的设备与从模式的设备连接成功后可进行数据传输。从模式的设备则等待其他主模式的设备发送配对请求。现有设备的蓝牙模式能够在主模式和从模式之间切换。
现有技术中,在安卓平台下,服务端设备的蓝牙模式采用从模式时,监听多个主模式的客户端设备的连接状态,同一时刻只能与一个主模式的客户端设备进行数据通讯,在数据传输过程中,当需要发送大数据时,系统会自动分包,读特征请求被多次调用从而引发发送数据异常(例如有脏数,如发送的数据是1-100,接收方会收到好几个1-100),从而导致通讯不稳定。
发明内容
本发明的目的是为了克服现有技术的不足,提供一种基于安卓平台的通讯实现方法及装置。
第一方面,本发明实施例提供了一种基于安卓平台的通讯实现方法,适用于蓝牙模式为从模式的服务端设备,该方法包括:
步骤S1:当所述服务端设备通过触发服务事件回调的写特征请求方法接收到客户端设备发送的处理请求时,解析所述处理请求并判断单线程池是否执行结束,是则执行步骤S2,否则保存解析结果,生成设备忙的错误响应数据并返回给所述客户端设备,继续执行当前操作;
步骤S2:所述服务端设备根据所述处理请求的解析结果进行相应处理,并根据处理结果生成响应数据,将所述响应数据返回给所述客户端设备;
所述将所述响应数据返回给所述客户端设备,包括:所述服务端设备将所述响应数据作为参数置于服务事件回调的读特征请求方法中,当所述服务事件回调的读特征请求方法被触发时将所述响应数据发送给客户端设备;或,所述服务端设备通过订阅特征改变方法将所述响应数据发送给客户端设备;
所述服务事件回调的读特征请求方法被触发时执行步骤Y,
步骤Y:所述服务端设备将所述响应数据中偏移位置开始长度为MTU的数据发送给所述客户端设备,根据MTU更新偏移,判断是否为最后一次发送所述响应数据中的数据,是则将所述响应数据中当前偏移之后的数据发送给所述客户端设备,否则返回步骤Y;所述偏移的初始值为0;
所述服务端设备通过订阅特征改变方法将所述响应数据发送给客户端设备,包括步骤L,
步骤L:所述服务端设备获取MTU;判断是否为最后一次发送数据包,是则获取所述响应数据中偏移位置开始之后的数据并赋值给本地发送字节数组,根据GATT特征里的默认写类型常量和本地发送字节数组数据对GATT特征对象进行设置,将设置好的所述GATT特征对象作为参数调用订阅特征改变方法,结束,否则从所述响应数据的偏移位置开始获取长度为MTU的数据并赋值给本地发送字节数组,根据GATT特征里的默认写类型常量和本地发送字节数组数据对GATT特征对象进行设置,将设置好的所述GATT特征对象作为参数调用订阅特征改变方法,根据MTU更新偏移,再次根据所述发送次数和最大发送次数判断是否为最后一次发送数据包;所述偏移的初始值为0;
所述订阅特征改变方法被调用时引发服务事件回调的消息发送方法将所述GATT特征对象中的数据包发送给所述客户端设备。
第二方面,本发明实施例又提供一种基于安卓平台的通讯实现装置,所述装置设置于蓝牙模式为从模式的服务端设备中,包括:
写特征模块,用于通过触发服务事件回调的写特征请求方法接收客户端设备发送的处理请求;
解析判断模块,用于解析所述处理请求并判断单线程池是否执行结束,是则触发处理模块,否则保存解析结果,生成设备忙的错误响应数据并返回给所述客户端设备,继续执行当前操作;
所述处理模块,用于根据所述处理请求的解析结果进行相应处理,并根据处理结果生成响应数据;
发送模块,用于将所述响应数据返回给所述客户端设备;
所述发送模块包括:读特征子模块和/或订阅特征子模块;
所述读特征子模块,用于将所述响应数据作为参数置于服务事件回调的读特征请求方法中,当所述服务事件回调的读特征请求方法被触发时将所述响应数据发送给客户端设备;
所述订阅特征子模块,用于通过订阅特征改变方法将所述响应数据发送给客户端设备;
所述读特征子模块具体用于,用于将所述响应数据作为参数置于服务事件回调的读特征请求方法中,当所述服务事件回调的读特征请求方法被触发时,将所述响应数据中偏移位置开始长度为MTU的数据发送给所述客户端设备,根据MTU更新偏移,判断是否为最后一次发送所述响应数据中的数据,是则将所述响应数据中当前偏移之后的数据发送给所述客户端设备,否则将所述响应数据中偏移位置开始长度为MTU的数据发送给所述客户端设备,根据MTU更新偏移,再次判断是否为最后一次发送所述响应数据中的数据,直至为最后一次发送所述响应数据中的数据;所述偏移的初始值为0;
所述订阅特征子模块,具体用于获取MTU;判断是否为最后一次发送数据包,是则获取所述响应数据中偏移位置开始之后的数据并赋值给本地发送字节数组,根据GATT特征里的默认写类型常量和本地发送字节数组数据对GATT特征对象进行设置,将设置好的所述GATT特征对象作为参数调用订阅特征改变方法,结束,否则从所述响应数据的偏移位置开始获取长度为MTU的数据并赋值给本地发送字节数组,根据GATT特征里的默认写类型常量和本地发送字节数组数据对GATT特征对象进行设置,将设置好的所述GATT特征对象作为参数调用订阅特征改变方法,根据MTU更新偏移,再次根据所述发送次数和最大发送次数判断是否为最后一次发送数据包;所述偏移的初始值为0;
所述订阅特征子模块,具体还用于在所述订阅特征改变方法被调用时引发服务事件回调的消息发送方法将所述GATT特征对象中的数据包发送给所述客户端设备。
第三方面,本发明实施例又提供一种服务端设备,所述服务端设备包括至少一个处理器、存储器及存储在所述存储器上并可被所述至少一个处理器执行的指令,所述至少一个处理器执行所述指令以实现上述所述的一种基于安卓平台的通讯实现方法。
第四方面,本发明实施例又提供一种计算机可读存储介质,所述计算机可读存储介质包括计算机程序,当所述计算机程序在电子设备上运行时,使得所述服务端设备执行上述所述的一种基于安卓平台的通讯实现方法。
第五方面,本发明实施例又提供一种芯片系统,包括芯片,所述芯片与存储器耦合,用于执行所述存储器中存储的计算机程序,以执行上述所述的一种基于安卓平台的通讯实现方法。
本发明与现有技术相比,具有以下优点:本发明技术方案中,服务端设备的蓝牙模式为从模式,可以与多个客户端设备连接,能监听多个客户端设备的连接状态,当在某一时刻与一个客户端设备进行数据通讯时接收到另一个客户端设备发送的数据会将该数据保存下来并通知另一个客户端设备当前服务端设备正忙,当前操作结束后顺序对保存下来的数据进行处理;对于通讯时遇到的大数据,可以触发读特征请求方法采用偏移方式发送数据给系统,由系统截取有效数据返回给客户端设备,或对于通讯时遇到的大数据,通过调用订阅特征改变方法分包并进行发送,且在订阅特征改变方法中对数据包的长度可进行调整,保证数据的正常收发,使通讯更加稳定,使用更加方便快捷。
附图说明
图1为本发明实施例一提供的一种基于安卓平台的通讯实现方法的流程图;
图2为本发明实施例二中的应用程序启动之后开始构建服务的流程图;
图3为本发明实施例二中的服务事件回调的连接状态改变方法被调用时的操作流程图;
图4为本发明实施例二中的服务事件回调的读特征请求方法被调用时的操作流程图;
图5为本发明实施例二中的订阅特征改变方法被调用时的操作流程图;
图6为本发明实施例三提供的一种基于安卓平台的通讯实现方法的流程图;
图7为本发明实施例四提供的一种基于安卓平台的通讯实现装置的方框图。
具体实施方式
本申请提出了一种基于安卓平台的通讯实现方法及装置,下面结合附图,对本申请具体实施方式进行详细说明。所述实施例的示例在附图中示出。下面通过参考附图描述的实施例是示例性的,仅用于解释本申请,而不能解释为对本申请的限制。
本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语),具有与本申请所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语,应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样被特定定义,否则不会用理想化或过于正式的含义来解释。
为使本发明的目的、技术方案和优点更加清楚,下面结合附图对本发明实施方式作进一步地详细描述。
实施例一
本发明实施例一提供了一种基于安卓平台的通讯实现方法,适用于蓝牙模式为从模式的服务端设备,如图1所示,本实施例的方法包括:
步骤S1:当服务端设备通过触发服务事件回调的写特征请求方法接收到客户端设备发送的处理请求时,解析处理请求并判断单线程池是否执行结束,是则执行步骤S2,否则保存解析结果,生成设备忙的错误响应数据并返回给客户端设备,继续执行当前操作;
其中,当服务事件回调的写特征请求方法被触发时,服务端设备在服务事件回调的写特征请求方法中,将客户端设备的设备信息为键保存在收数散列表中,将从写特征请求方法中获取到的处理请求转换为十六进制字符串并缓存在缓存区中,并将缓存区中的十六进制字符串为键值对保存在在收数散列表中;
在本实施例中,当服务端设备创建应用程序时,构建设备列表、收数散列表和MTU散列表,设备列表保存与服务端设备进行通讯时的客户端设备的设备信息,收数散列表以客户端设备的设备信息为键、以缓存区对象为键值对对应保存数据,该MTU散列表以客户端设备的设备信息为键、以MTU为长度值对应保存数据;即收数散列表保存每次进行交互时客户端设备的设备信息和该客户端设备发送的数据,收数散列表保存每次进行交互时客户端设备的设备信息和通讯数据的数据长度;
具体的,该步骤中的解析处理请求,具体为:对收数散列表中的键值对进行解析得到解析结果;
例如,在本实施例中,如服务端设备正在组装响应数据时接收到其他客户端设备发送的处理请求时,解析该处理请求并保存解析结果,生成设备忙的错误响应数据并返回给其他客户端设备,然后继续进行组装响应数据操作;
步骤S2:服务端设备根据处理请求的解析结果进行相应处理,并根据处理结果生成响应数据,将响应数据返回给客户端设备;
在本实施例中,将响应数据返回给客户端设备,包括:
服务端设备将响应数据作为参数置于服务事件回调的读特征请求方法中,当服务事件回调的读特征请求方法被触发时将响应数据发送给客户端设备;或,服务端设备通过订阅特征改变方法将响应数据发送给客户端设备;
具体的,当客户端操作GATT服务中的GATT读特征时触发服务端设备的服务事件回调的读特征请求方法;
具体的,服务事件回调的读特征请求方法被触发时执行步骤Y,
步骤Y:服务端设备将响应数据中偏移位置开始长度为MTU的数据发送给客户端设备,根据MTU更新偏移,判断是否为最后一次发送响应数据中的数据,是则触发服务事件回调的读特征请求方法将响应数据中当前偏移之后的数据发送给客户端设备,否则返回步骤Y;偏移的初始值为0;
在本实施例中,根据偏移发送响应数据是个循环过程,每发送一次更新一次偏移,直到偏移小于响应数据的长度(即响应数据已经发送完成);每次循环发送时使用的参数为系统提供的参数;
具体的,服务端设备通过订阅特征改变方法将响应数据发送给客户端设备,包括步骤L,
步骤L:服务端设备获取MTU;判断是否为最后一次发送数据包,是则获取响应数据中偏移位置开始之后的数据并赋值给本地发送字节数组,根据GATT特征里的默认写类型常量和本地发送字节数组数据对GATT特征对象进行设置,将设置好的GATT特征对象作为参数调用订阅特征改变方法,结束,否则从响应数据的偏移位置开始获取长度为MTU的数据并赋值给本地发送字节数组,根据GATT特征里的默认写类型常量和本地发送字节数组数据对GATT特征对象进行设置,将设置好的GATT特征对象作为参数调用订阅特征改变方法,根据MTU更新偏移,再次根据发送次数和最大发送次数判断是否为最后一次发送数据包;偏移的初始值为0;
订阅特征改变方法被调用时引发服务事件回调的消息发送方法将GATT特征对象中的数据包发送给客户端设备。
本实施例的服务端设备内设置有应用程序,应用程序被触发开始工作时创建单线程池,步骤S1之前还包括:
步骤A:应用程序初始化服务端设备配置,构建服务使服务端设备处于广播状态;
具体的,在本实施例中,构建服务,包括:
步骤A1:应用程序判断构建服务条件是否符合要求,是则执行步骤A2,否则提示构建服务条件不符合;
更进一步地,步骤A1包括:
步骤A1-1:应用程序检查权限是否符合要求,是则执行步骤A1-2,否则提示用户需要申请权限;
步骤A1-2:应用程序检查服务端设备是否支持蓝牙通讯,是则执行步骤A1-3,否则提示服务端设备不支持蓝牙通讯;
步骤A1-3:应用程序根据应用上下文调用系统接口并传入预设参数获取蓝牙管理器;
步骤A1-4:应用程序根据蓝牙管理器获取蓝牙适配器,根据蓝牙适配器判断服务端设备的蓝牙是否打开,是则执行步骤A1-5,否则提示服务端设备的蓝牙未打开;
步骤A1-5:应用程序根据蓝牙适配器获取蓝牙广播者,并判断获取到的蓝牙广播者是否为空,是则提示服务端设备不支持蓝牙从模式,否则执行步骤A2;
步骤A2:应用程序构建广播设置对象,给广播设置对象设置是否被连接、连接超时时间、广播模式、发射功率;
步骤A3:应用程序构建广播数据设置对象,给广播数据设置对象设置是否在广播中携带设备名称、是否在广播中携带信号强度;
步骤A4:应用程序构建扫描响应的广播设置对象,给扫描响应的广播设置对象设置广播包中是否包含蓝牙的发射功率,通过传入新构建的服务UUID常量和新构建的服务字节数组数据添加服务数据;
步骤A5:应用程序通过蓝牙适配器设置蓝牙名称;
步骤A6:应用程序构建广播的结果回调;
步骤A7:应用程序通过蓝牙广播者和广播设置对象、广播数据设置对象、扫描响应的广播设置对象、广播的结果回调来开启广播,如开启成功则执行步骤A8,如开启失败则报错;
步骤A8:应用程序构建服务事件回调,通过蓝牙管理器和服务事件回调获取GATT服务器;
步骤A9:应用程序通过新构建的描述UUID常量和预设的GATT特征里的写权限常量构建GATT描述,通过新构建的订阅UUID常量、预设的GATT特征里的订阅属性常量和GATT描述构建GATT订阅特征,通过新构建的写UUID常量、预设的GATT特征里的写属性常量和预设的GATT特征里的写权限常量构建GATT写特征,通过新构建的读UUID常量、预设的GATT特征里的读属性常量和预设的GATT特征里的读权限常量构建GATT读特征,通过新构建的服务UUID常量和预设的GATT服务里的主服务类型常量构建GATT服务;
步骤A10:应用程序将GATT订阅特征、GATT写特征、GATT读特征添加到GATT服务中,将GATT服务添加到GATT服务器中;
步骤B:当应用程序通过触发服务事件回调的连接状态改变方法获取客户端设备发起的连接状态,如连接状态为连接成功则服务端设备构建设备列表,并将客户端设备的设备信息保存到设备列表中;
其中,当服务事件回调的连接状态改变方法被触发时,执行步骤T1-步骤T4;
步骤T1:应用程序从服务事件回调的连接状态改变方法中获取状态的值,并判断状态的值是否为第一预设值,是则执行步骤T2,否则报错;
步骤T2:应用程序从服务事件回调的连接状态改变方法中获取新状态的值,并判断新状态的值,如为第二预设值则执行步骤T3,如为第三预设值则执行步骤T4,如为其他则报错;
步骤T3:应用程序构建设备列表,并将客户端设备的设备信息保存到设备列表中;
步骤T4:应用程序遍历设备列表,根据客户端设备的设备信息删除设备列表中对应的设备信息;遍历收数散列表,根据客户端设备的设备信息删除对应的键值对(键值对为对应设备信息保存的通讯数据);遍历MTU散列表,根据客户端设备的设备信息删除对应的长度值;
步骤C:当应用程序通过服务事件回调的MTU改变方法接收到客户端设备发起的MTU请求时,触发服务事件回调的MTU改变方法生成MTU散列表。
其中,当服务事件回调的MTU改变方法被触发时,从MTU改变方法中获取连接的客户端设备的设备信息和MTU,更新MTU,以客户端设备的设备信息为键且以更新后的MTU为长度值对应保存在MTU散列表中。
步骤Y包括:
步骤Y1:服务端设备的应用程序根据响应数据的长度减去偏移得到当前响应数据的大小,根据当前响应数据的大小构建对应的当前响应字节数组数据,并将响应数据从偏移位置开始的数据赋值给当前响应字节数组数据;
步骤Y2:服务端设备的应用程序从服务事件回调的读特征请求方法中获得GATT读特征,从GATT读特征中获取UUID,判断获取的UUID是否与预设的读特征UUID相同,是则执行步骤Y3,否则发送失败,返回空数据响应;
步骤Y3:服务端设备的应用程序给系统返回发送成功信息和当前响应字节数组数据,系统将接收到的当前响应字节数组数据中超过MTU长度的数据丢弃,系统通过系统接口将当前响应字节数组数据中的剩余数据发送给当前通讯的客户端设备,系统会自动更新偏移;
其中,系统会自动更新偏移,具体为:系统用偏移加上MTU再减1的结果替换偏移;
步骤Y4:服务端设备的应用程序判断更新后的偏移是否小于响应数据的长度,是则返回步骤Y1,否则结束。
具体的,在本实施例中,步骤L包括:
步骤L1:服务端设备的应用程序生成GATT特征对象;
更进一步地,步骤L1包括:
步骤L1-1:服务端设备的应用程序构建GATT特征对象;
步骤L1-2:服务端设备的应用程序判断GATT特征对象是否为空,是则执行步骤L1-3,否则执行步骤L1-8;
步骤L1-3:服务端设备的应用程序通过GATT服务器和预设的服务UUID常量获取GATT服务;
步骤L1-4:服务端设备的应用程序判断获取到的GATT服务是否为空,是则报错,结束,否则执行步骤L1-5;
步骤L1-5:服务端设备的应用程序通过GATT服务和预设的订阅UUID常量获取GATT订阅特征;
步骤L1-6:服务端设备的应用程序判断获取到的GATT订阅特征是否为空,是则报错,结束,否则执行步骤L1-7;
步骤L1-7:服务端设备的应用程序将获取到的GATT订阅特征赋值给构建的GATT特征对象;
步骤L1-8:服务端设备的应用程序根据传入的GATT特征里的默认写类型常量对GATT特征对象设置写类型属性;
步骤L2:服务端设备的应用程序根据传入的响应数据构建最大发送次数、最后一包数据的长度、偏移;
在本实施例中,步骤L2具体为:服务端设备的应用程序用MTU对响应数据的长度取商的结果赋值给最大发送次数,用MTU对响应数据的长度取余的结果赋值给最后一包数据的长度,偏移初始值为0;
步骤L3:服务端设备的应用程序从设备列表中获取设备信息,根据设备信息在MTU散列表中查找对应的键值对,如找到则将找到的键值对中的长度值赋值给MTU,执行步骤L4,如未找到则给MTU赋值为默认值,执行步骤L4;
步骤L4:服务端设备的应用程序根据MTU对响应数据进行分包;
步骤L5:服务端设备的应用程序判断最后一包数据的长度是否为0并判断最大发送次数是否大于0,如判断均为是则执行步骤L6,否则执行步骤L7;
步骤L6:服务端设备的应用程序将MTU赋值给最后一包数据的长度,更新最大发送次数,执行步骤L7;
步骤L7:服务端设备的应用程序构建发送次数并赋初始值为0;
步骤L8:服务端设备的应用程序判断发送次数是否小于最大发送次数,是则执行步骤L9,否则执行步骤L12;
步骤L9:服务端设备的应用程序构建一个长度为MTU的本地发送字节数组,将响应数据从偏移位置开始获取长度为MTU的数据并赋值给本地发送字节数组;
步骤L10:服务端设备的应用程序根据本地发送字节数组数据对GATT特征对象进行设置;
步骤L11:服务端设备的应用程序通过GATT服务器、设备信息和GATT特征对象调用订阅特征改变方法,更新偏移和发送次数,返回步骤L8;
在本实施例中,更新偏移具体为:用偏移加MTU的结果更新偏移;
更新发送次数具体为:用发送次数自加1的结果更新发送次数;
步骤L12:服务端设备的应用程序构建一个长度为最后一包数据长度的本地发送字节数组,将响应数据从偏移位置开始获取长度为最后一包数据长度的数据并赋值给本地发送字节数组;
步骤L13:服务端设备的应用程序根据本地发送字节数组数据对GATT特征对象进行设置;
步骤L14:服务端设备的应用程序通过GATT服务器、设备信息和GATT特征对象调用订阅特征改变方法。
实施例二
本发明实施例二在实施例一基础上提供一种基于安卓平台的通讯实现方法,适用于蓝牙模式为从模式的服务端设备,在服务端设备内设置有应用程序(当服务端设备创建应用程序时,同时构建设备列表、收数散列表和MTU散列表),应用程序启动时创建单线程池并开始构建服务,构建服务实现过程如图2所示,包括:
步骤201:应用程序初始化服务端设备配置,检查权限是否符合要求,是则执行步骤202,否则提示用户需要申请权限;
在本实施例中,该步骤中的权限包括蓝牙权限,还可以包括如低版本的位置权限;
步骤202:应用程序检查服务端设备是否支持蓝牙通讯,是则执行步骤203,否则提示不支持蓝牙通讯;
步骤203:应用程序根据应用上下文调用系统接口并传入预设参数获取蓝牙管理器;
具体的,该步骤中的系统接口为getSystemService,预设参数为Bluetooth;
步骤204:应用程序根据蓝牙管理器获取蓝牙适配器,根据蓝牙适配器判断自身的蓝牙是否打开,是则执行步骤205,否则提示蓝牙未打开;
步骤205:应用程序根据蓝牙适配器获取蓝牙广播者,并判断获取到的蓝牙广播者是否为空,是则提示不支持蓝牙从模式,否则执行步骤206;
步骤206:应用程序构建广播设置对象,给广播设置对象设置是否被连接、连接超时时间、广播模式、发射功率;
步骤207:应用程序构建广播数据设置对象,给广播数据设置对象设置是否在广播中携带设备名称、是否在广播中携带信号强度;
步骤208:应用程序构建扫描响应的广播设置对象,给扫描响应的广播设置对象设置广播包中是否包含蓝牙的发射功率,通过传入新构建的服务UUID(中文全称:通用唯一识别码,英文全称:Universally Unique Identifier)常量和新构建的服务字节数组数据添加服务数据;
步骤209:应用程序通过蓝牙适配器设置蓝牙名称;
步骤210:应用程序构建广播的结果回调;
步骤211:应用程序通过蓝牙广播者和广播设置对象、广播数据设置对象、扫描响应的广播设置对象、广播的结果回调开启广播,如开启成功则执行步骤212,如开启失败则报错;
步骤212:应用程序构建服务事件回调,通过蓝牙管理器和传入的服务事件的回调获取GATT(英文全称:Generic Attribute Profile),中文全称:通用属性配置文件)服务器;
在本实施例中,服务事件的回调包括:连接状态改变方法、读特征请求方法、写特征请求方法、MTU(英文全称:Maximum Transmission Unit,中文全称:网络上传送的最大数据包,单位是字节)改变方法;
在本实施例中,GATT是用Attribute Protocal(属性协议)定义的一个service(服务)框架;此框架定义了Services以及它们的Characteristics(特征)的格式和规程,该规程包括发现、读、写、通知、指示以及配置广播的characteristic;
步骤213:应用程序通过新构建的描述UUID常量和预设的GATT特征里的写权限常量构建GATT描述,通过新构建的订阅UUID常量、预设的GATT特征里的订阅属性常量和GATT描述构建GATT订阅特征,通过新构建的写UUID常量、预设的GATT特征里的写属性常量和预设的GATT特征里的写权限常量构建GATT写特征,通过新构建的读UUID常量、预设的GATT特征里的读属性常量和预设的GATT特征里的读权限常量构建GATT读特征,通过新构建的服务UUID常量和预设的GATT服务里的主服务类型常量构建GATT服务;
步骤214:应用程序将GATT订阅特征、GATT写特征、GATT读特征添加到GATT服务中,将GATT服务添加到GATT服务器中;
如图3所示,当服务事件回调的连接状态改变方法被触发时,执行步骤301-304;
步骤301:应用程序从服务事件回调的连接状态改变方法中获取状态的值,并判断该状态的值是否为第一预设值,是则执行步骤302,否则报错;
在本实施例中,步骤301之前还包括:客户端设备扫描应用程序,并向扫描到的应用程序发送连接请求;
可选的,本实施例中的第一预设值为0;
步骤302:应用程序从服务事件回调的连接状态改变方法中获取新状态的值,并判断该新状态的值,如为第二预设值则执行步骤304,如为第三预设值则执行步骤303,如为其他则报错;
例如,本实施例中的第二预设值与第一预设值相同,均为0,第三预设值为2;
在本实施例中,获取的新状态的值如为2则表示设备连接成功,如为0则表示设备断开,如为1则表示设备正在连接,如为3则表示设备正在断开;
步骤303:应用程序构建设备列表,并将客户端设备的设备信息保存到设备列表中,当前操作结束;
步骤304:应用程序遍历设备列表,根据客户端设备的设备信息删除设备列表中对应的设备信息;遍历收数散列表,根据客户端设备的设备信息删除对应的键值对;遍历MTU散列表,根据客户端设备的设备信息删除对应的长度值,当前操作结束;
当服务事件回调的写特征请求方法被触发时,应用程序在服务事件回调的写特征请求方法中,将客户端设备的设备信息为键保存在收数散列表中;将从写特征请求方法中获取到的字节数组数据转换为十六进制字符串并缓存在缓存区中,并将缓存区中的十六进制字符串为键值对保存在收数散列表中;
服务端设备的应用程序将响应数据和获取的偏移作为参数置于服务事件回调的读特征请求方法中,当客户端操作GATT服务中的GATT读特征时,触发服务事件回调的读特征请求方法,当服务事件回调的读特征请求方法被触发时将响应数据发送给客户端设备,如图4所示,发送数据过程包括:
步骤401:应用程序根据响应数据的长度减去偏移得到当前响应数据的大小,根据当前响应数据的大小构建对应的当前响应字节数组数据,并将响应数据从偏移位置开始的数据赋值给当前响应字节数组数据;
具体的,在本实施例中,偏移的起始值为0;
步骤402:应用程序从服务事件回调的读特征请求方法中获得GATT读特征,从GATT读特征中获取UUID,判断获取的UUID是否与预设的读特征UUID相同,是则执行步骤403,否则发送失败,返回空数据响应;
步骤403:应用程序给系统返回发送成功信息和当前响应字节数组数据,系统将接收到的当前响应字节数组数据中超过MTU长度的数据丢弃,系统通过系统接口将当前响应字节数组数据中的剩余数据发送给当前通讯的客户端设备,系统会自动更新偏移;
具体的,在本实施例中,系统会自动更新偏移,具体为:系统用偏移加上MTU再减1的结果替换偏移;
步骤404:应用程序判断更新后的偏移是否小于响应数据的长度,是则返回步骤401,否则响应数据发送完成,结束;
服务端设备通过订阅特征改变方法发送数据的过程如图5所示;
步骤501:应用程序构建GATT特征对象;
步骤502:应用程序判断GATT特征对象是否为空,是则执行步骤503,否则执行步骤508;
步骤503:应用程序通过GATT服务器和预设的服务UUID常量获取GATT服务;
步骤504:应用程序判断获取到的GATT服务是否为空,是则报错,结束,否则执行步骤505;
步骤505:应用程序通过GATT服务和预设的订阅UUID常量获取GATT订阅特征;
步骤506:应用程序判断获取到的GATT订阅特征是否为空,是则报错,结束,否则执行步骤507;
步骤507:应用程序将获取到的GATT订阅特征赋值给构建的GATT特征对象,执行步骤508;
步骤508:应用程序根据传入的GATT特征里的默认写类型常量对GATT特征对象设置写类型属性;
步骤509:应用程序根据传入的响应数据构建最大发送次数、最后一包数据的长度、偏移;
步骤510:应用程序从设备列表中获取设备信息,根据设备信息在MTU散列表中查找对应的键值对,如找到则将该键值对中的长度值赋值给MTU,执行步骤511,如未找到则给MTU赋值为默认值20,执行步骤511;
步骤511:应用程序用MTU对响应数据的长度取商的结果赋值给最大发送次数,用MTU对响应数据的长度取余的结果赋值给最后一包数据的长度;
步骤512:应用程序判断最后一包数据的长度是否为0并判断最大发送次数是否大于0,如判断均为是则执行步骤513,否则执行步骤514;
步骤513:应用程序将MTU赋值给最后一包数据的长度,更新最大发送次数,执行步骤514;
具体的,在本实施例中,更新最大发送次数为:用最大发送次数自减1的结果更新最大发送次数;
步骤514:应用程序构建发送次数并赋初始值为0;
步骤515:应用程序判断发送次数是否小于最大发送次数,是则执行步骤516,否则执行步骤519;
步骤516:应用程序构建一个长度为MTU的本地发送字节数组,将响应数据从偏移位置开始获取长度为MTU的数据并赋值给本地发送字节数组;
步骤517:应用程序根据本地发送字节数组数据GATT特征对象进行设置;
步骤518:应用程序通过GATT服务器、获取的设备信息和GATT特征对象调用订阅特征改变方法,更新偏移和发送次数,返回步骤515;
在本实施例中,根据GATT特征里的默认写类型常量和本地发送字节数组数据对GATT特征对象进行设置,将GATT服务器、获取的设备信息和设置好的GATT特征对象作为参数传入服务中的订阅特征改变方法中;
在本实施例中,更新偏移具体为:用偏移加MTU的结果更新偏移;更新发送次数具体为:用发送次数自加1的结果更新发送次数;
步骤519:应用程序构建一个长度为最后一包数据长度的本地发送字节数组,将响应数据从偏移位置开始获取长度为最后一包数据长度的数据并赋值给本地发送字节数组;
步骤520:应用程序根据本地发送字节数组数据GATT特征对象进行设置;
步骤521:应用程序通过GATT服务器、获取的设备信息和GATT特征对象调用订阅特征改变方法,响应数据发送完成,结束;
在本实施例中,根据GATT特征里的默认写类型常量和本地发送字节数组数据对GATT特征对象进行设置,将GATT服务器、获取的设备信息和设置好的GATT特征对象作为参数传入服务中的订阅特征改变方法中;
在本实施例中,订阅特征改变方法的被调用时引发服务事件回调的消息发送方法,通过消息发送方法将GATT特征对象中的数据返回给客户端设备。
当服务事件回调的MTU改变方法被触发时,应用程序从MTU改变方法的参数中获取连接的客户端设备的设备信息和MTU,更新MTU,构建一个MTU散列表,以客户端设备的设备信息为键,以更新后的MTU为长度值保存在MTU散列表中;
在本实施例中,更新MTU,具体为:用获取到的MTU自减3的结果更新MTU。
实施例三
本发明实施例三提供一种基于安卓平台的通讯实现方法,服务端设备设有应用程序,如图6所示,本实施例方法包括:
步骤601:服务端设备初始化服务端设备配置,构建服务使服务端设备处于广播状态;
在本实施例中,构建服务的具体实现过程在实施例二中进行了详细描述(参见图2),在此不再赘述;
步骤602:当客户端设备扫描到服务端设备时发起连接请求;
可选的,在本实施例中,步骤602包括:客户端设备扫描应用程序,并向扫描到的服务端设备发送连接请求;
步骤603:服务端设备通过服务事件回调的连接状态改变方法获取客户端设备发起的连接请求中的连接状态,如连接状态为连接成功则执行步骤604;
例如,在本实施例中,通过服务事件回调的连接状态改变方法获取客户端设备的连接状态,具体为:应用程序在服务事件回调的连接状态改变方法中,获取到状态的值为第一预设值且新状态的值为第三预设值则,表示连接成功;
例如,第一预设值为0,第三预设值为2;
步骤604:服务端设备构建设备列表,并将客户端设备的设备信息保存到设备列表中;
步骤605:客户端设备向服务端设备发起MTU请求;
步骤606:服务端设备通过服务事件回调的MTU改变方法接收到MTU请求时,通过服务事件回调的MTU改变方法生成MTU散列表;
具体的,在本实施例中,当服务事件回调的MTU改变方法被触发时,从MTU改变方法中获取连接的客户端设备的设备信息和MTU,更新MTU,以客户端设备的设备信息为键、以更新后的MTU为长度值保存在MTU散列表中;
可选的,本实施例中,保存在MTU散列表中的长度值可以为默认的20字节也可以是服务端设备与连接的客户端设备协商得到的数据;
例如,在本实施例中,该步骤中服务端设备在服务事件回调的MTU改变方法中获取的MTU为153字节,更新后的MTU为150字节;
步骤607:客户端设备向服务端设备发送处理请求;
步骤608:服务端设备通过服务事件回调的写特征请求方法接收处理请求;
例如,本实施例中,接收到的处理请求为55AA010100387B227472616E735F74797065223A313030312C227472616E735F616D6F756E74223A312C226F726465725F6E6F223A22303030303031227D1000CC33;
具体的,当客户端操作GATT服务中的GATT写特征时,触发服务事件回调的写特征请求方法,当服务事件回调的写特征请求方法被触发时服务端设备接收处理请求;
步骤609:服务端设备解析处理请求,判断当前单线程池是否执行结束,是则执行步骤610,否则保存解析结果,生成设备忙的错误响应数据并返回,继续执行当前操作;
可选的,在本实施例中,步骤609之前还包括:服务端设备接收到另一客户端设备发送的数据时,在步骤609判断为否时服务端设备给另一客户端设备返回设备忙的错误响应数据,当前操作结束后顺序对保存下来的数据进行处理;
例如,在本实施例中,解析处理请求得到的解析结果为:7B227472616E735F74797065223A313030312C227472616E735F616D6F756E74223A312C226F726465725F6E6F223A22303030303031227D;
设备忙的错误响应数据为:55AA000100147B227472616E735F6572726F72223A303030327D7600CC33;
步骤610:服务端设备根据处理请求的解析结果设置处理信息,根据处理信息生成处理指令;
可选的,在本实施例中,处理指令包括结算指令、交易指令;根据处理信息生成处理指令,包括:调用第一预设接口根据处理结果生成结算指令,或调用第二预设接口根据处理结果生成交易指令;
例如,本实施例中服务端设备根据处理请求解析结果得到的处理信息为:{"trans_type":1001,"trans_amount":1,"order_no":"000001"},
生成的处理指令为:A502001A21110100001400A404000E315041592E5359532E444446303100F45A02002E002A6F26840E315041592E5359532E4444463031A5148801015F2D027A689F110101BF0C059F4D020B0A9000000080;
步骤611:服务端设备开始寻卡操作,当检测到有卡片连接时执行步骤612;
步骤612:服务端设备在收到需要输入密码的回调时,显示输入密码界面提示用户输入密码,当接收到用户输入的密码信息时判断接收的密码信息是否与保存的用户信息匹配,是则执行步骤613,否则报错;
例如,在本实施例中,用户输入的密码信息为123456;
步骤613:服务端设备将处理指令发送给卡片并接收卡片返回的处理结果,根据处理结果生成响应数据,执行步骤614;
例如,本实施例中收到的处理结果为:
getTLV :87
getTLV result:623142893000001913D23012204600000001;
响应数据为:55AA000102447B227472616E735F6572726F72223A303030302C227472616E735F6E6F223A3030303030362C22636172645F6E6F223A22363233313432383933303030303031393133222C2270696E223A354536464143373841414645354446342C22636172645F65787069726544617465223A323330312C2263757272656E63795F636F6465223A3738342C226D65726368616E745F6E616D65223A537461726275636B73204265696A696E672C227465726D696E616C5F6E6F223A30313130313030382C226D65726368616E745F6E6F223A303131303130303033393033392C2262617463685F6E6F223A3030312C22636172645F74797065223A302C227472616E735F74696D65223A3232303730343136353830382C227472616E735F64617465223A303730342C227472616E735F74797065223A322C22737461747573223A312C22766F75636865725F6E6F223A3030303030362C22636172645F736E223A3632333134323839333030303030313931332C226F746865725F616D6F756E74223A302C22636F6D706C6574655F616D6F756E74223A302C22636F6D706C6574655F70757263686173655F616D6F756E74223A302C2261637475616C5F616D6F756E74223A302C226368616E6E656C5F646973636F756E745F616D6F756E74223A302C226F70657261746F725F6964223A30312C22736572766963655F696E7075745F6D6F6465223A4131303130313531333034433130312C22747261636B32223A3632333134323839333030303030313931334432333031323230343630303030303030317D7C00CC33;
步骤614:服务端设备将响应数据返回给客户端设备;
可选的,在本实施例中,步骤614可包括:服务端设备将响应数据作为参数置于服务事件回调的读特征请求方法中,当客户端操作GATT服务中的GATT读特征时,触发服务端设备的服务事件回调的读特征请求方法将响应数据发送给客户端设备;或服务端设备通过订阅特征改变方法将响应数据发送给客户端设备;
在本实施例中,步骤614的具体实现过程在实施例二有详细记载,参见图4和图5,在此不再赘述;
例如,该步骤的响应数据为:55AA000102447B227472616E735F6572726F72223A303030302C227472616E735F6E6F223A3030303030362C22636172645F6E6F223A22363233313432383933303030303031393133222C2270696E223A354536464143373841414645354446342C22636172645F65787069726544617465223A323330312C2263757272656E63795F636F6465223A3738342C226D65726368616E745F6E616D65223A537461726275636B73204265696A696E672C227465726D696E616C5F6E6F223A30313130313030382C226D65726368616E745F6E6F223A303131303130303033393033392C2262617463685F6E6F223A3030312C22636172645F74797065223A302C227472616E735F74696D65223A3232303730343136353830382C227472616E735F64617465223A303730342C227472616E735F74797065223A322C22737461747573223A312C22766F75636865725F6E6F223A3030303030362C22636172645F736E223A3632333134323839333030303030313931332C226F746865725F616D6F756E74223A302C22636F6D706C6574655F616D6F756E74223A302C22636F6D706C6574655F70757263686173655F616D6F756E74223A302C2261637475616C5F616D6F756E74223A302C226368616E6E656C5F646973636F756E745F616D6F756E74223A302C226F70657261746F725F6964223A30312C22736572766963655F696E7075745F6D6F6465223A4131303130313531333034433130312C22747261636B32223A3632333134323839333030303030313931334432333031323230343630303030303030317D7C00CC33;
(一)服务端设备通过订阅特征改变方法将响应数据发送给客户端设备,其中,响应数据的长度是590,步骤510中MTU值为153;步骤511中最大发送次数为3、偏移为0、最后一包数据的长度为131;
步骤512中应用程序判断最后一包数据的长度131不为0并判断最大发送次数3大于0,执行步骤514;
在步骤514中构建的发送次数是0,步骤515中判断发送次数0小于最大发送次数3,则执行步骤516;
在步骤516中,本地发送字节数组的长度为153,步骤517中的本地发送字节数组数据为:55AA000102447B227472616E735F6572726F72223A303030302C227472616E735F6E6F223A3030303030362C22636172645F6E6F223A22363233313432383933303030303031393133222C2270696E223A354536464143373841414645354446342C22636172645F65787069726544617465223A323330312C2263757272656E63795F636F6465223A3738342C226D65726368616E745F6E61;
步骤518中服务端设备发送的第一包数据(即客户端设备收到的第一包数据)为:55AA000102447B227472616E735F6572726F72223A303030302C227472616E735F6E6F223A3030303030362C22636172645F6E6F223A22363233313432383933303030303031393133222C2270696E223A354536464143373841414645354446342C22636172645F65787069726544617465223A323330312C2263757272656E63795F636F6465223A3738342C226D65726368616E745F6E61;更新后的偏移为153,更新后的发送次数为1;
在步骤515中判断发送次数1小于最大发送次数3,执行步骤516;
在步骤516中,本地发送字节数组长度为153,步骤517中的本地发送字节数组数据为:6D65223A537461726275636B73204265696A696E672C227465726D696E616C5F6E6F223A30313130313030382C226D65726368616E745F6E6F223A303131303130303033393033392C2262617463685F6E6F223A3030312C22636172645F74797065223A302C227472616E735F74696D65223A3232303730343136353830382C227472616E735F64617465223A303730342C227472616E735F;
步骤518中服务端设备发送的第二包数据(即客户端设备收到的第二包数据)为:6D65223A537461726275636B73204265696A696E672C227465726D696E616C5F6E6F223A30313130313030382C226D65726368616E745F6E6F223A303131303130303033393033392C2262617463685F6E6F223A3030312C22636172645F74797065223A302C227472616E735F74696D65223A3232303730343136353830382C227472616E735F64617465223A303730342C227472616E735F;更新后的偏移为306,更新后的发送次数为2;
在步骤515中判断发送次数2小于最大发送次数3,步骤516中的本地发送字节数组长度为153,步骤517中的本地发送字节数组数据为:74797065223A322C22737461747573223A312C22766F75636865725F6E6F223A3030303030362C22636172645F736E223A3632333134323839333030303030313931332C226F746865725F616D6F756E74223A302C22636F6D706C6574655F616D6F756E74223A302C22636F6D706C6574655F70757263686173655F616D6F756E74223A302C2261637475616C5F616D6F756E74223A302C22;
步骤518中服务端设备发送的第三包数据(即客户端设备收到的第三包数据)为:74797065223A322C22737461747573223A312C22766F75636865725F6E6F223A3030303030362C22636172645F736E223A3632333134323839333030303030313931332C226F746865725F616D6F756E74223A302C22636F6D706C6574655F616D6F756E74223A302C22636F6D706C6574655F70757263686173655F616D6F756E74223A302C2261637475616C5F616D6F756E74223A302C22;更新后的偏移为459,更新后的发送次数为3;
在步骤515中,判断发送次数3等于最大发送次数3,执行步骤519;
步骤519中的本地发送字节数组长度为131,步骤520中本地发送字节数组数据为:6368616E6E656C5F646973636F756E745F616D6F756E74223A302C226F70657261746F725F6964223A30312C22736572766963655F696E7075745F6D6F6465223A4131303130313531333034433130312C22747261636B32223A3632333134323839333030303030313931334432333031323230343630303030303030317D7C00CC33;
步骤521中服务端设备发送的第四包数据(即客户端设备收到的第四包数据)为:6368616E6E656C5F646973636F756E745F616D6F756E74223A302C226F70657261746F725F6964223A30312C22736572766963655F696E7075745F6D6F6465223A4131303130313531333034433130312C22747261636B32223A3632333134323839333030303030313931334432333031323230343630303030303030317D7C00CC33,响应数据发送完成,结束;
(二)服务端设备将响应数据作为参数置于服务事件回调的读特征请求方法中,当客户端操作GATT服务中的GATT读特征时,触发服务端设备的服务事件回调的读特征请求方法将响应数据发送给客户端设备,则在步骤402中响应数据的长度是590,偏移是0,当前响应数据的大小为590,当前响应字节数组数据为:55AA000102447B227472616E735F6572726F72223A303030302C227472616E735F6E6F223A3030303030362C22636172645F6E6F223A22363233313432383933303030303031393133222C2270696E223A354536464143373841414645354446342C22636172645F65787069726544617465223A323330312C2263757272656E63795F636F6465223A3738342C226D65726368616E745F6E616D65223A537461726275636B73204265696A696E672C227465726D696E616C5F6E6F223A30313130313030382C226D65726368616E745F6E6F223A303131303130303033393033392C2262617463685F6E6F223A3030312C22636172645F74797065223A302C227472616E735F74696D65223A3232303730343136353830382C227472616E735F64617465223A303730342C227472616E735F74797065223A322C22737461747573223A312C22766F75636865725F6E6F223A3030303030362C22636172645F736E223A3632333134323839333030303030313931332C226F746865725F616D6F756E74223A302C22636F6D706C6574655F616D6F756E74223A302C22636F6D706C6574655F70757263686173655F616D6F756E74223A302C2261637475616C5F616D6F756E74223A302C226368616E6E656C5F646973636F756E745F616D6F756E74223A302C226F70657261746F725F6964223A30312C22736572766963655F696E7075745F6D6F6465223A4131303130313531333034433130312C22747261636B32223A3632333134323839333030303030313931334432333031323230343630303030303030317D7C00CC33;
应用程序发送给系统的第一包数据为:55AA000102447B227472616E735F6572726F72223A303030302C227472616E735F6E6F223A3030303030362C22636172645F6E6F223A22363233313432383933303030303031393133222C2270696E223A354536464143373841414645354446342C22636172645F65787069726544617465223A323330312C2263757272656E63795F636F6465223A3738342C226D65726368616E745F6E616D65223A537461726275636B73204265696A696E672C227465726D696E616C5F6E6F223A30313130313030382C226D65726368616E745F6E6F223A303131303130303033393033392C2262617463685F6E6F223A3030312C22636172645F74797065223A302C227472616E735F74696D65223A3232303730343136353830382C227472616E735F64617465223A303730342C227472616E735F74797065223A322C22737461747573223A312C22766F75636865725F6E6F223A3030303030362C22636172645F736E223A3632333134323839333030303030313931332C226F746865725F616D6F756E74223A302C22636F6D706C6574655F616D6F756E74223A302C22636F6D706C6574655F70757263686173655F616D6F756E74223A302C2261637475616C5F616D6F756E74223A302C226368616E6E656C5F646973636F756E745F616D6F756E74223A302C226F70657261746F725F6964223A30312C22736572766963655F696E7075745F6D6F6465223A4131303130313531333034433130312C22747261636B32223A3632333134323839333030303030313931334432333031323230343630303030303030317D7C00CC33;
系统发送给客户端设备的第一包数据(即客户端设备收到的第一包数据)为:55AA000102447B227472616E735F6572726F72223A303030302C227472616E735F6E6F223A3030303030362C22636172645F6E6F223A22363233313432383933303030303031393133222C2270696E223A354536464143373841414645354446342C22636172645F65787069726544617465223A323330312C2263757272656E63795F636F6465223A3738342C226D65726368616E745F6E616D65;
在步骤405中,系统自动更新偏移,更新后的偏移为155,判断更新后的偏移155<响应数据的长度590,执行步骤402;
在步骤402中,当前响应数据的大小为435,当前响应字节数组数据为:223A537461726275636B73204265696A696E672C227465726D696E616C5F6E6F223A30313130313030382C226D65726368616E745F6E6F223A303131303130303033393033392C2262617463685F6E6F223A3030312C22636172645F74797065223A302C227472616E735F74696D65223A3232303730343136353830382C227472616E735F64617465223A303730342C227472616E735F74797065223A322C22737461747573223A312C22766F75636865725F6E6F223A3030303030362C22636172645F736E223A3632333134323839333030303030313931332C226F746865725F616D6F756E74223A302C22636F6D706C6574655F616D6F756E74223A302C22636F6D706C6574655F70757263686173655F616D6F756E74223A302C2261637475616C5F616D6F756E74223A302C226368616E6E656C5F646973636F756E745F616D6F756E74223A302C226F70657261746F725F6964223A30312C22736572766963655F696E7075745F6D6F6465223A4131303130313531333034433130312C22747261636B32223A3632333134323839333030303030313931334432333031323230343630303030303030317D7C00CC33;
应用程序发送给系统的第二包数据为:223A537461726275636B73204265696A696E672C227465726D696E616C5F6E6F223A30313130313030382C226D65726368616E745F6E6F223A303131303130303033393033392C2262617463685F6E6F223A3030312C22636172645F74797065223A302C227472616E735F74696D65223A3232303730343136353830382C227472616E735F64617465223A303730342C227472616E735F74797065223A322C22737461747573223A312C22766F75636865725F6E6F223A3030303030362C22636172645F736E223A3632333134323839333030303030313931332C226F746865725F616D6F756E74223A302C22636F6D706C6574655F616D6F756E74223A302C22636F6D706C6574655F70757263686173655F616D6F756E74223A302C2261637475616C5F616D6F756E74223A302C226368616E6E656C5F646973636F756E745F616D6F756E74223A302C226F70657261746F725F6964223A30312C22736572766963655F696E7075745F6D6F6465223A4131303130313531333034433130312C22747261636B32223A3632333134323839333030303030313931334432333031323230343630303030303030317D7C00CC33;
系统发送给客户端设备的第二包数据(即客户端设备收到的第二包数据)为:23A537461726275636B73204265696A696E672C227465726D696E616C5F6E6F223A30313130313030382C226D65726368616E745F6E6F223A303131303130303033393033392C2262617463685F6E6F223A3030312C22636172645F74797065223A302C227472616E735F74696D65223A3232303730343136353830382C227472616E735F64617465223A303730342C227472616E735F74797065;
步骤405中系统自动更新偏移,更新后的偏移为310,应用程序判断更新后的偏移310<响应数据的长度590 ,返回步骤402;
在步骤402中,当前响应数据的大小为280,当前响应字节数组数据为:223A322C22737461747573223A312C22766F75636865725F6E6F223A3030303030362C22636172645F736E223A3632333134323839333030303030313931332C226F746865725F616D6F756E74223A302C22636F6D706C6574655F616D6F756E74223A302C22636F6D706C6574655F70757263686173655F616D6F756E74223A302C2261637475616C5F616D6F756E74223A302C226368616E6E656C5F646973636F756E745F616D6F756E74223A302C226F70657261746F725F6964223A30312C22736572766963655F696E7075745F6D6F6465223A4131303130313531333034433130312C22747261636B32223A3632333134323839333030303030313931334432333031323230343630303030303030317D7C00CC33;
应用程序发送给系统的第三包数据为:223A322C22737461747573223A312C22766F75636865725F6E6F223A3030303030362C22636172645F736E223A3632333134323839333030303030313931332C226F746865725F616D6F756E74223A302C22636F6D706C6574655F616D6F756E74223A302C22636F6D706C6574655F70757263686173655F616D6F756E74223A302C2261637475616C5F616D6F756E74223A302C226368616E6E656C5F646973636F756E745F616D6F756E74223A302C226F70657261746F725F6964223A30312C22736572766963655F696E7075745F6D6F6465223A4131303130313531333034433130312C22747261636B32223A3632333134323839333030303030313931334432333031323230343630303030303030317D7C00CC33;
系统发送给客户端设备的第三包数据(即客户端设备收到的第三包数据)为:223A322C22737461747573223A312C22766F75636865725F6E6F223A3030303030362C22636172645F736E223A3632333134323839333030303030313931332C226F746865725F616D6F756E74223A302C22636F6D706C6574655F616D6F756E74223A302C22636F6D706C6574655F70757263686173655F616D6F756E74223A302C2261637475616C5F616D6F756E74223A302C226368616E6E65;
步骤405中,系统自动更新偏移,更新后的偏移为465,应用程序判断更新后的偏移465<响应数据的长度590,返回步骤402;
在步骤402中,当前响应数据的大小为125,当前响应字节数组数据为:6C5F646973636F756E745F616D6F756E74223A302C226F70657261746F725F6964223A30312C22736572766963655F696E7075745F6D6F6465223A4131303130313531333034433130312C22747261636B32223A3632333134323839333030303030313931334432333031323230343630303030303030317D7C00CC33;
应用程序发送给系统的第四包数据为:6C5F646973636F756E745F616D6F756E74223A302C226F70657261746F725F6964223A30312C22736572766963655F696E7075745F6D6F6465223A4131303130313531333034433130312C22747261636B32223A3632333134323839333030303030313931334432333031323230343630303030303030317D7C00CC33;
系统发送给客户端设备的第四包数据(即客户端设备收到的第四包数据)为:6C5F646973636F756E745F616D6F756E74223A302C226F70657261746F725F6964223A30312C22736572766963655F696E7075745F6D6F6465223A4131303130313531333034433130312C22747261636B32223A3632333134323839333030303030313931334432333031323230343630303030303030317D7C00CC33;
步骤405中系统自动更新偏移,更新后的偏移为620,应用程序判断更新后的偏移620大于响应数据的长度590,结束,响应数据发送完成;
步骤615:客户端设备给服务端设备发送断开请求;
步骤616:服务端设备通过服务事件回调的连接状态改变方法获去的状态值和新状态值,如状态值为第一预设值且新状态值为第二预设值时断开与客户端设备的连接;
例如,在本实施例中,第一预设值和第二预设值均为0,服务端设备在服务事件回调的连接状态改变方法中获取的状态的值为0,新状态的值为0,表示断开连接成功。
本发明技术方案中,服务端设备的蓝牙模式为从模式,可以与多个客户端设备连接,能监听多个客户端设备的连接状态,当在某一时刻与一个客户端设备进行数据通讯时接收到另一个客户端设备发送的数据会将该数据保存下来并通知另一个客户端设备当前服务端设备正忙,当前操作结束后顺序对保存下来的数据进行处理;对于通讯时遇到的大数据,可以触发读特征请求方法采用偏移方式发送数据给系统,由系统截取有效数据返回给客户端设备,或对于通讯时遇到的大数据,通过调用订阅特征改变方法分包并进行发送,且在订阅特征改变方法中对数据包的长度可进行调整,保证数据的正常收发,使通讯更加稳定,使用更加方便快捷。
实施例四
本发明实施例四提供一种基于安卓平台的通讯实现装置,该装置设置于蓝牙模式为从模式的服务端设备中,装置包括:
写特征模块,用于通过触发服务事件回调的写特征请求方法接收客户端设备发送的处理请求;
解析判断模块,用于解析处理请求并判断单线程池是否执行结束,是则触发处理模块,否则保存解析结果,生成设备忙的错误响应数据并返回给客户端设备,继续执行当前操作;
处理模块,用于根据处理请求的解析结果进行相应处理,并根据处理结果生成响应数据;
发送模块,用于将响应数据返回给客户端设备;
发送模块包括:读特征子模块和/或订阅特征子模块;
读特征子模块,用于将响应数据作为参数置于服务事件回调的读特征请求方法中,当触发服务事件回调的读特征请求方法被触发时将响应数据发送给客户端设备;
订阅特征子模块,用于通过订阅特征改变方法将响应数据发送给客户端设备;
读特征子模块具体用于,用于将响应数据作为参数置于服务事件回调的读特征请求方法中,当服务事件回调的读特征请求方法被触发时,将响应数据中偏移位置开始长度为MTU的数据发送给客户端设备,根据MTU更新偏移,判断是否为最后一次发送响应数据中的数据,是则将响应数据中当前偏移之后的数据发送给客户端设备,否则将响应数据中偏移位置开始长度为MTU的数据发送给客户端设备,根据MTU更新偏移,再次判断是否为最后一次发送响应数据中的数据,直至为最后一次发送响应数据中的数据;偏移的初始值为0;
订阅特征子模块,具体用于获取MTU;判断是否为最后一次发送数据包,是则获取响应数据中偏移位置开始之后的数据并赋值给本地发送字节数组,根据GATT特征里的默认写类型常量和本地发送字节数组数据对GATT特征对象进行设置,将设置好的GATT特征对象作为参数调用订阅特征改变方法,结束,否则从响应数据的偏移位置开始获取长度为MTU的数据并赋值给本地发送字节数组,根据GATT特征里的默认写类型常量和本地发送字节数组数据对GATT特征对象进行设置,将设置好的GATT特征对象作为参数调用订阅特征改变方法,根据MTU更新偏移,再次根据发送次数和最大发送次数判断是否为最后一次发送数据包;偏移的初始值为0;
订阅特征子模块,具体还用于在订阅特征改变方法被调用时引发服务事件回调的消息发送方法将GATT特征对象中的数据包发送给客户端设备。
该服务端设备内设置有应用程序,应用程序被触发开始工作时创建单线程池,装置还包括:
初始构建模块,用于初始化服务端设备配置,构建服务使服务端设备处于广播状态;
获取保存模块,用于当通过触发服务事件回调的连接状态改变方法获取客户端设备发起的连接状态,如连接状态为连接成功则服务端设备构建设备列表,并将客户端设备的设备信息保存到设备列表中;
接收生成模块,用于当通过服务事件回调的MTU改变方法接收到客户端设备发起的MTU请求时,触发服务事件回调的MTU改变方法生成MTU散列表。
其中,接收生成模块具体用于当通过服务事件回调的MTU改变方法接收到客户端设备发起的MTU请求时,触发服务事件回调的MTU改变方法,从MTU改变方法中获取连接的客户端设备的设备信息和MTU,更新MTU,以客户端设备的设备信息为键且以更新后的MTU为长度值对应保存在MTU散列表中。
具体的,本实施例中的初始构建模块包括:
初始化子模块,用于初始化服务端设备配置;
第一判断子模块,用于判断构建服务条件是否符合要求,是则触发第一构建子模块,否则提示构建服务条件不符合;
第一构建子模块,用于构建广播设置对象,给广播设置对象设置是否被连接、连接超时时间、广播模式、发射功率;
第二构建子模块,用于构建广播数据设置对象,给广播数据设置对象设置是否在广播中携带设备名称、是否在广播中携带信号强度;
第三构建子模块,用于构建扫描响应的广播设置对象,给扫描响应的广播设置对象设置广播包中是否包含蓝牙的发射功率,通过传入新构建的服务UUID常量和新构建的服务字节数组数据添加服务数据;
第一设置子模块,用于通过蓝牙适配器设置蓝牙名称;
第四构建子模块,用于构建广播的结果回调;
开启子模块,用于通过蓝牙广播者和广播设置对象、广播数据设置对象、扫描响应的广播设置对象、广播的结果回调来开启广播,如开启成功则触发构建回调子模块,如开启失败则报错;
构建回调子模块,用于构建服务事件回调,通过蓝牙管理器和服务事件回调获取GATT服务器;
第五构建子模块,用于通过新构建的描述UUID常量和预设的GATT特征里的写权限常量构建GATT描述,通过新构建的订阅UUID常量、预设的GATT特征里的订阅属性常量和GATT描述构建GATT订阅特征,通过新构建的写UUID常量、预设的GATT特征里的写属性常量和预设的GATT特征里的写权限常量构建GATT写特征,通过新构建的读UUID常量、预设的GATT特征里的读属性常量和预设的GATT特征里的读权限常量构建GATT读特征,通过新构建的服务UUID常量和预设的GATT服务里的主服务类型常量构建GATT服务;
添加子模块,用于将GATT订阅特征、GATT写特征、GATT读特征添加到GATT服务中,将GATT服务添加到GATT服务器中。
更进一步地,第一判断子模块包括:
第一检查单元,用于检查权限是否符合要求,是则触发第二检查单元,否则提示用户需要申请权限;
第二检查单元,用于检查服务端设备是否支持蓝牙通讯,是则触发第一获取单元,否则提示服务端设备不支持蓝牙通讯;
第一调用获取单元,用于根据应用上下文调用系统接口并传入预设参数获取蓝牙管理器;
第一获取判断单元,用于根据蓝牙管理器获取蓝牙适配器,根据蓝牙适配器判断服务端设备的蓝牙是否打开,是则触发第二获取判断单元,否则提示服务端设备的蓝牙未打开;
第二获取判断单元,用于根据蓝牙适配器获取蓝牙广播者,并判断获取到的蓝牙广播者是否为空,是则提示服务端设备不支持蓝牙从模式,否则触发第一构建子模块。
更进一步地,装置还包括:
第一获取判断模块,用于当服务事件回调的连接状态改变方法被触发时,从服务事件回调的连接状态改变方法中获取状态的值,并判断状态的值是否为第一预设值,是则触发第二获取判断模块,否则报错;
第二获取判断模块,用于从服务事件回调的连接状态改变方法中获取新状态的值,并判断新状态的值,如为第二预设值则触发构建保存模块,如为第三预设值则触发删除模块,如为其他则报错;
构建保存模块,用于构建设备列表,并将客户端设备的设备信息保存到设备列表中;
删除模块,用于遍历设备列表,根据客户端设备的设备信息删除设备列表中对应的设备信息;遍历收数散列表,根据客户端设备的设备信息删除对应的键值对;遍历MTU散列表,根据客户端设备的设备信息删除对应的长度值。
在本实施例中,写特征模块具体用于在服务事件回调的写特征请求方法中,将客户端设备的设备信息为键保存在收数散列表中;将从写特征请求方法中获取到的处理请求转换为十六进制字符串并缓存在缓存区中,并将缓存区中的十六进制字符串为键值对保存在收数散列表中。
更进一步地,本实施例中的读特征子模块包括:
第一构建赋值单元,用于根据响应数据的长度减去偏移得到当前响应数据的大小,根据当前响应数据的大小构建对应的当前响应字节数组数据,并将响应数据从偏移位置开始的数据赋值给当前响应字节数组数据;
第三获取判断单元,用于从服务事件回调的读特征请求方法中获得GATT读特征,从GATT读特征中获取UUID,判断获取的UUID是否与预设的读特征UUID相同,是则触发返回更新单元,否则发送失败,返回空数据响应;
第一返回更新单元,用于给系统返回发送成功信息和当前响应字节数组数据;
在本实施例中,系统将接收到的当前响应字节数组数据中超过MTU长度的数据丢弃,系统通过系统接口将当前响应字节数组数据中的剩余数据发送给当前通讯的客户端设备,系统会自动更新偏移;
其中,系统会自动更新偏移,具体为:系统用偏移加上MTU再减1的结果替换偏移;
判断触发单元,用于判断更新后的偏移是否小于响应数据的长度,是则触发第一构建赋值单元,否则结束。
更进一步地,本实施例中的订阅特征子模块包括:
第一生成单元,用于生成GATT特征对象;
第一构建单元,用于根据传入的响应数据构建最大发送次数、最后一包数据的长度、偏移;
其中,第一构建单元具体用于用MTU对响应数据的长度取商的结果赋值给最大发送次数,用MTU对响应数据的长度取余的结果赋值给最后一包数据的长度,偏移初始值为0;
第一获取查找赋值单元,用于从设备列表中获取设备信息,根据设备信息在MTU散列表中查找对应的键值对,如找到则将找到的键值对中的长度值赋值给MTU,触发分包单元,如未找到则给MTU赋值为默认值,触发分包单元;
第一分包单元,用于根据MTU对响应数据进行分包;
第一判断单元,用于判断最后一包数据的长度是否为0并判断最大发送次数是否大于0,如判断均为是则触发赋值更新单元,否则触发第二构建赋值单元;
第一赋值更新单元,用于将MTU赋值给最后一包数据的长度,更新最大发送次数,触发第二构建赋值单元;
第二构建赋值单元,用于构建发送次数并赋初始值为0;
第二判断单元,用于程序判断发送次数是否小于最大发送次数,是则触发第三构建赋值单元,否则触发第四构建赋值单元;
第三构建赋值单元,用于构建一个长度为MTU的本地发送字节数组,将响应数据从偏移位置开始获取长度为MTU的数据并赋值给本地发送字节数组;
第一发送单元,用于根据本地发送字节数组数据对GATT特征对象进行设置;
第一调用更新单元,用于通过GATT服务器、设备信息和GATT特征对象调用订阅特征改变方法,更新偏移和发送次数,触发第二判断单元;
其中,本实施例的第一调用更新单元中的更新偏移具体为:用偏移加MTU的结果更新偏移;更新发送次数具体为:用发送次数自加1的结果更新发送次数;
第四构建赋值单元,用于构建一个长度为最后一包数据长度的本地发送字节数组,将响应数据从偏移位置开始获取长度为最后一包数据长度的数据并赋值给本地发送字节数组;
第二发送单元,用于根据本地发送字节数组数据对GATT特征对象进行设置;
第一调用单元,用于通过GATT服务器、设备信息和GATT特征对象调用订阅特征改变方法。
其中,第一生成单元包括:
第一构建子单元,用于构建GATT特征对象;
第一判断子单元,用于判断GATT特征对象是否为空,是则触发第一获取子单元,否则触发第一设置子单元;
第一获取子单元,用于通过GATT服务器和预设的服务UUID常量获取GATT服务;
第二判断子单元,用于判断获取到的GATT服务是否为空,是则报错,结束,否则触发第二获取子单元;
第二获取子单元,用于通过GATT服务和预设的订阅UUID常量获取GATT订阅特征;
第三判断子单元,用于判断获取到的GATT订阅特征是否为空,是则报错,结束,否则触发第三获取子单元;
第三获取子单元,用于将获取到的GATT订阅特征赋值给构建的GATT特征对象;
第一设置子单元,用于根据传入的GATT特征里的默认写类型常量对GATT特征对象设置写类型属性。
更进一步地,本实施例中的处理模块包括:
解析生成子模块,用于根据处理请求的解析结果设置处理信息,根据处理信息生成处理指令;
寻卡检测子模块,用于开始寻卡操作,当检测到有卡片连接时触发发送接收生成子模块;
发送接收生成子模块,用于在检测卡片合法时将处理指令发送给卡片并接收卡片返回的处理结果,根据处理结果生成响应数据。
其中,本实施例中的处理模块还包括:显示判断子模块,用于在收到需要输入密码的回调时,显示输入密码界面提示用户输入密码,当接收到用户输入的密码信息时判断接收的密码信息是否与保存的用户信息匹配,是则卡片合法,触发发送接收生成子模块,否则卡片不合法。
可选的,本申请的实施例还提供了一种服务端设备,该服务端设备包括至少一个处理器、存储器及存储在该存储器上并可被至少一个处理器执行的指令,至少一个处理器执行该指令以实现上述实施例中的基于安卓平台的通讯实现方法。该服务端设备是芯片系统时,可以由芯片构成,也可以包含芯片和其他分立器件,本申请实施例对此不作具体限定;该芯片与存储器耦合,用于执行存储器中存储的计算机程序,以执行上述实施例中公开的基于安卓平台的通讯实现方法。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件程序实现时,可以全部或部分地以计算机程序产品的形式来实现。该计算机程序产品包括一个或多个计算机程序。在电子设备上加载和执行计算机程序时,全部或部分地产生按照本申请实施例所述的流程或功能。该计算机程序可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个基站、电子设备、服务端设备或者数据中心通过有线(例如同轴电缆、光纤、数字用户线(digital subscriber line,DSL))或无线(例如红外、无线、微波等)方式向另一个基站、电子设备、服务端设备或数据中心进行传输。所述计算机可读存储介质可以是电子设备能够存取的任何可用介质或者是包含一个或多个可以用介质集成的服务端设备、数据中心等数据存储设备。所述可用介质可以是磁性介质(例如,软盘、硬盘、磁带),光介质(例如,DVD)、 或者半导体介质(例如固态硬盘(solid state disk,SSD))等。本申请实施例中,服务端设备可以包括前面所述的装置。
尽管在此结合各实施例对本申请进行了描述,然而,在实施所要求保护的本申请过程中,本领域技术人员通过查看所述附图、公开内容、以及所附权利要求书,可理解并实现所述公开实施例的其他变化。在权利要求中,“包括”(comprising)一词不排除其他组成部分或步骤,“一”或“一个”不排除多个的情况。单个处理器或其他单元可以实现权利要求中列举的若干项功能。相互不同的从属权利要求中记载了某些措施,但这并不表示这些措施不能组合起来产生良好的效果。
尽管结合具体特征及其实施例对本申请进行了描述,显而易见的,在不脱离本申请的精神和范围的情况下,可对其进行各种修改和组合。相应地,本说明书和附图仅仅是所附权利要求所界定的本申请的示例性说明,且视为已覆盖本申请范围内的任意和所有修改、变化、组合或等同物。显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。
Claims (19)
1.一种基于安卓平台的通讯实现方法,其特征在于,适用于蓝牙模式为从模式的服务端设备,所述方法包括:
步骤S1:当所述服务端设备通过触发服务事件回调的写特征请求方法接收到客户端设备发送的处理请求时,解析所述处理请求并判断单线程池是否执行结束,是则执行步骤S2,否则保存解析结果,生成设备忙的错误响应数据并返回给所述客户端设备,继续执行当前操作;
步骤S2:所述服务端设备根据所述处理请求的解析结果进行相应处理,并根据处理结果生成响应数据,将所述响应数据返回给所述客户端设备;
所述将所述响应数据返回给所述客户端设备,包括:所述服务端设备将所述响应数据作为参数置于服务事件回调的读特征请求方法中,当所述服务事件回调的读特征请求方法被触发时将所述响应数据发送给客户端设备;或,所述服务端设备通过订阅特征改变方法将所述响应数据发送给客户端设备;
所述服务事件回调的读特征请求方法被触发时执行步骤Y,
步骤Y:所述服务端设备将所述响应数据中偏移位置开始长度为网络上传送的最大数据包MTU的数据发送给所述客户端设备,根据MTU更新偏移,判断是否为最后一次发送所述响应数据中的数据,是则将所述响应数据中当前偏移之后的数据发送给所述客户端设备,否则返回步骤Y;所述偏移的初始值为0;
所述服务端设备通过订阅特征改变方法将所述响应数据发送给客户端设备,包括步骤L,
步骤L:所述服务端设备获取MTU;判断是否为最后一次发送数据包,是则获取所述响应数据中偏移位置开始之后的数据并赋值给本地发送字节数组,根据通用属性配置文件GATT特征里的默认写类型常量和本地发送字节数组数据对GATT特征对象进行设置,将设置好的所述GATT特征对象作为参数调用订阅特征改变方法,结束,否则从所述响应数据的偏移位置开始获取长度为MTU的数据并赋值给本地发送字节数组,根据GATT特征里的默认写类型常量和本地发送字节数组数据对GATT特征对象进行设置,将设置好的所述GATT特征对象作为参数调用订阅特征改变方法,根据MTU更新偏移,再次根据发送次数和最大发送次数判断是否为最后一次发送数据包;所述偏移的初始值为0;
所述订阅特征改变方法被调用时引发服务事件回调的消息发送方法将所述GATT特征对象中的数据包发送给所述客户端设备。
2.如权利要求1所述的方法,其特征在于,所述服务端设备内设置有应用程序,所述应用程序被触发开始工作时创建单线程池,所述步骤S1之前还包括:
步骤A:所述应用程序初始化服务端设备配置,构建服务使所述服务端设备处于广播状态;
步骤B:当所述应用程序通过触发服务事件回调的连接状态改变方法获取客户端设备发起的连接状态,如连接状态为连接成功则所述服务端设备构建设备列表,并将客户端设备的设备信息保存到设备列表中;
步骤C:当所述应用程序通过服务事件回调的MTU改变方法接收到客户端设备发起的MTU请求时,触发所述服务事件回调的MTU改变方法生成MTU散列表;所述MTU散列表用于保存键值对,所述MTU散列表中的键值对是以设备信息为键、通讯数据的长度值为键值。
3.如权利要求2所述的方法,其特征在于,当所述服务事件回调的MTU改变方法被触发时,从所述MTU改变方法中获取连接的客户端设备的设备信息和MTU,更新所述MTU,以所述客户端设备的设备信息为键且以更新后的MTU为长度值对应保存在MTU散列表中。
4.如权利要求2所述的方法,其特征在于,所述构建服务,包括:
步骤A1:所述应用程序判断构建服务条件是否符合要求,是则执行步骤A2,否则提示构建服务条件不符合;
步骤A2:所述应用程序构建广播设置对象,给所述广播设置对象设置是否被连接、连接超时时间、广播模式、发射功率;
步骤A3:所述应用程序构建广播数据设置对象,给所述广播数据设置对象设置是否在广播中携带设备名称、是否在广播中携带信号强度;
步骤A4:所述应用程序构建扫描响应的广播设置对象,给所述扫描响应的广播设置对象设置广播包中是否包含蓝牙的发射功率,通过传入新构建的服务UUID常量和新构建的服务字节数组数据添加服务数据;
步骤A5:所述应用程序通过蓝牙适配器设置蓝牙名称;
步骤A6:所述应用程序构建广播的结果回调;
步骤A7:所述应用程序通过蓝牙广播者和所述广播设置对象、所述广播数据设置对象、所述扫描响应的广播设置对象、所述广播的结果回调来开启广播,如开启成功则执行步骤A8,如开启失败则报错;
步骤A8:所述应用程序构建服务事件回调,通过蓝牙管理器和所述服务事件回调获取GATT服务器;
步骤A9:所述应用程序通过新构建的描述UUID常量和预设的GATT特征里的写权限常量构建GATT描述,通过新构建的订阅UUID常量、预设的GATT特征里的订阅属性常量和所述GATT描述构建GATT订阅特征,通过新构建的写UUID常量、预设的GATT特征里的写属性常量和预设的GATT特征里的写权限常量构建GATT写特征,通过新构建的读UUID常量、预设的GATT特征里的读属性常量和预设的GATT特征里的读权限常量构建GATT读特征,通过新构建的服务UUID常量和预设的GATT服务里的主服务类型常量构建GATT服务;
步骤A10:所述应用程序将所述GATT订阅特征、所述GATT写特征、所述GATT读特征添加到GATT服务中,将所述GATT服务添加到所述GATT服务器中。
5.如权利要求4所述的方法,其特征在于,所述步骤A1包括:
步骤A1-1:所述应用程序检查权限是否符合要求,是则执行步骤A1-2,否则提示用户需要申请权限;
步骤A1-2:所述应用程序检查服务端设备是否支持蓝牙通讯,是则执行步骤A1-3,否则提示所述服务端设备不支持蓝牙通讯;
步骤A1-3:所述应用程序根据应用上下文调用系统接口并传入预设参数获取蓝牙管理器;
步骤A1-4:所述应用程序根据所述蓝牙管理器获取蓝牙适配器,根据所述蓝牙适配器判断所述服务端设备的蓝牙是否打开,是则执行步骤A1-5,否则提示所述服务端设备的蓝牙未打开;
步骤A1-5:所述应用程序根据所述蓝牙适配器获取蓝牙广播者,并判断获取到的所述蓝牙广播者是否为空,是则提示所述服务端设备不支持蓝牙从模式,否则执行步骤A2。
6.如权利要求2所述的方法,其特征在于,当所述服务事件回调的连接状态改变方法被触发时,执行步骤T1-步骤T4;
步骤T1:所述应用程序从服务事件回调的连接状态改变方法中获取状态的值,并判断所述状态的值是否为第一预设值,是则执行步骤T2,否则报错;
步骤T2:所述应用程序从服务事件回调的连接状态改变方法中获取新状态的值,并判断所述新状态的值,如为第二预设值则执行步骤T3,如为第三预设值则执行步骤T4,如为其他则报错;
步骤T3:所述应用程序构建设备列表,并将所述客户端设备的设备信息保存到所述设备列表中;
步骤T4:所述应用程序遍历所述设备列表,根据所述客户端设备的设备信息删除设备列表中对应的设备信息;遍历收数散列表,根据客户端设备的设备信息删除对应的键值对;遍历MTU散列表,根据客户端设备的设备信息删除对应的长度值;
所述收数散列表用于保存键值对,所述收数散列表中的键值对是以设备信息为键、通讯数据为键值。
7.如权利要求1所述的方法,其特征在于,当所述服务事件回调的写特征请求方法被触发时,所述服务端设备在服务事件回调的写特征请求方法中,将所述客户端设备的设备信息为键保存在收数散列表中;将从所述写特征请求方法中获取到的处理请求转换为十六进制字符串并缓存在缓存区中,并将所述缓存区中的十六进制字符串为键值对保存在收数散列表中。
8.如权利要求1所述的方法,其特征在于,所述步骤Y包括:
步骤Y1:所述服务端设备的应用程序根据响应数据的长度减去偏移得到当前响应数据的大小,根据当前响应数据的大小构建对应的当前响应字节数组数据,并将响应数据从偏移位置开始的数据赋值给当前响应字节数组数据;
步骤Y2:所述服务端设备的应用程序从服务事件回调的读特征请求方法中获得GATT读特征,从所述GATT读特征中获取UUID,判断获取的UUID是否与预设的读特征UUID相同,是则执行步骤Y3,否则发送失败,返回空数据响应;
步骤Y3:所述服务端设备的应用程序给系统返回发送成功信息和当前响应字节数组数据,系统将接收到的当前响应字节数组数据中超过MTU长度的数据丢弃,系统通过系统接口将当前响应字节数组数据中的剩余数据发送给当前通讯的客户端设备,所述系统会自动更新偏移;
步骤Y4:所述服务端设备的应用程序判断更新后的偏移是否小于响应数据的长度,是则返回步骤Y1,否则结束。
9.如权利要求8所述的方法,其特征在于,所述系统会自动更新偏移,具体为:所述系统用偏移加上MTU再减1的结果替换偏移。
10.如权利要求1所述的方法,其特征在于,所述步骤L包括:
步骤L1:所述服务端设备的应用程序生成GATT特征对象;
步骤L2:所述服务端设备的应用程序根据传入的响应数据构建最大发送次数、最后一包数据的长度、偏移;
步骤L3:所述服务端设备的应用程序从设备列表中获取设备信息,根据所述设备信息在MTU散列表中查找对应的键值对,如找到则将找到的键值对中的长度值赋值给MTU,执行步骤L4,如未找到则给MTU赋值为默认值,执行步骤L4;
步骤L4:所述服务端设备的应用程序根据所述MTU对响应数据进行分包;
步骤L5:所述服务端设备的应用程序判断最后一包数据的长度是否为0并判断最大发送次数是否大于0,如判断均为是则执行步骤L6,否则执行步骤L7;
步骤L6:所述服务端设备的应用程序将所述MTU赋值给最后一包数据的长度,更新最大发送次数,执行步骤L7;
步骤L7:所述服务端设备的应用程序构建发送次数并赋初始值为0;
步骤L8:所述服务端设备的应用程序判断所述发送次数是否小于所述最大发送次数,是则执行步骤L9,否则执行步骤L12;
步骤L9:所述服务端设备的应用程序构建一个长度为MTU的本地发送字节数组,将所述响应数据从偏移位置开始获取长度为MTU的数据并赋值给本地发送字节数组;
步骤L10:所述服务端设备的应用程序根据本地发送字节数组数据对GATT特征对象进行设置;
步骤L11:所述服务端设备的应用程序通过GATT服务器、所述设备信息和所述GATT特征对象调用订阅特征改变方法,更新偏移和发送次数,返回步骤L8;
步骤L12:所述服务端设备的应用程序构建一个长度为最后一包数据长度的本地发送字节数组,将所述响应数据从偏移位置开始获取长度为最后一包数据长度的数据并赋值给本地发送字节数组;
步骤L13:所述服务端设备的应用程序根据本地发送字节数组数据对GATT特征对象进行设置;
步骤L14:所述服务端设备的应用程序通过GATT服务器、所述设备信息和所述GATT特征对象调用订阅特征改变方法。
11.如权利要求10所述的方法,其特征在于,所述更新偏移具体为:用偏移加MTU的结果更新偏移;
更新发送次数具体为:用发送次数自加1的结果更新发送次数。
12.如权利要求10所述的方法,其特征在于,所述步骤L2具体为:所述服务端设备的应用程序用MTU对所述响应数据的长度取商的结果赋值给最大发送次数,用MTU对所述响应数据的长度取余的结果赋值给最后一包数据的长度,偏移初始值为0。
13.如权利要求10所述的方法,其特征在于,所述步骤L1包括:
步骤L1-1:所述服务端设备的应用程序构建GATT特征对象;
步骤L1-2:所述服务端设备的应用程序判断所述GATT特征对象是否为空,是则执行步骤L1-3,否则执行步骤L1-8;
步骤L1-3:所述服务端设备的应用程序通过GATT服务器和预设的服务UUID常量获取GATT服务;
步骤L1-4:所述服务端设备的应用程序判断获取到的GATT服务是否为空,是则报错,结束,否则执行步骤L1-5;
步骤L1-5:所述服务端设备的应用程序通过所述GATT服务和预设的订阅UUID常量获取GATT订阅特征;
步骤L1-6:所述服务端设备的应用程序判断获取到的所述GATT订阅特征是否为空,是则报错,结束,否则执行步骤L1-7;
步骤L1-7:所述服务端设备的应用程序将获取到的GATT订阅特征赋值给构建的GATT特征对象;
步骤L1-8:所述服务端设备的应用程序根据传入的GATT特征里的默认写类型常量对GATT特征对象设置写类型属性。
14.如权利要求1所述的方法,其特征在于,所述服务端设备根据所述处理请求的解析结果进行相应处理,并根据处理结果生成响应数据,包括:
步骤S21:所述服务端设备根据所述处理请求的解析结果设置处理信息,根据所述处理信息生成处理指令;
步骤S22:所述服务端设备开始寻卡操作,当检测到有卡片连接时执行步骤S23;
步骤S23:所述服务端设备检测所述卡片合法时将所述处理指令发送给所述卡片并接收所述卡片返回的处理结果,根据所述处理结果生成响应数据。
15.如权利要求14所述的方法,其特征在于,所述步骤S22与所述步骤S23之间包括:所述服务端设备在收到需要输入密码的回调时,显示输入密码界面提示用户输入密码,当接收到用户输入的密码信息时判断接收的密码信息是否与保存的用户信息匹配,是则所述卡片合法,否则所述卡片不合法。
16.一种基于安卓平台的通讯实现装置,其特征在于,所述装置设置于蓝牙模式为从模式的服务端设备中,包括:
写特征模块,用于通过触发服务事件回调的写特征请求方法接收客户端设备发送的处理请求;
解析判断模块,用于解析所述处理请求并判断单线程池是否执行结束,是则触发处理模块,否则保存解析结果,生成设备忙的错误响应数据并返回给所述客户端设备,继续执行当前操作;
所述处理模块,用于根据所述处理请求的解析结果进行相应处理,并根据处理结果生成响应数据;
发送模块,用于将所述响应数据返回给所述客户端设备;
所述发送模块包括:读特征子模块和/或订阅特征子模块;
所述读特征子模块,用于将所述响应数据作为参数置于服务事件回调的读特征请求方法中,当所述服务事件回调的读特征请求方法被触发时将所述响应数据发送给客户端设备;
所述订阅特征子模块,用于通过订阅特征改变方法将所述响应数据发送给客户端设备;
所述读特征子模块,具体用于将所述响应数据作为参数置于服务事件回调的读特征请求方法中,当所述服务事件回调的读特征请求方法被触发时,将所述响应数据中偏移位置开始长度为网络上传送的最大数据包MTU的数据发送给所述客户端设备,根据MTU更新偏移,判断是否为最后一次发送所述响应数据中的数据,是则将所述响应数据中当前偏移之后的数据发送给所述客户端设备,否则将所述响应数据中偏移位置开始长度为MTU的数据发送给所述客户端设备,根据MTU更新偏移,再次判断是否为最后一次发送所述响应数据中的数据,直至为最后一次发送所述响应数据中的数据;所述偏移的初始值为0;
所述订阅特征子模块,具体用于获取MTU;判断是否为最后一次发送数据包,是则获取所述响应数据中偏移位置开始之后的数据并赋值给本地发送字节数组,根据通用属性配置文件GATT特征里的默认写类型常量和本地发送字节数组数据对GATT特征对象进行设置,将设置好的所述GATT特征对象作为参数调用订阅特征改变方法,结束,否则从所述响应数据的偏移位置开始获取长度为MTU的数据并赋值给本地发送字节数组,根据GATT特征里的默认写类型常量和本地发送字节数组数据对GATT特征对象进行设置,将设置好的所述GATT特征对象作为参数调用订阅特征改变方法,根据MTU更新偏移,再次根据发送次数和最大发送次数判断是否为最后一次发送数据包;所述偏移的初始值为0;
所述订阅特征子模块,具体还用于在所述订阅特征改变方法被调用时引发服务事件回调的消息发送方法将所述GATT特征对象中的数据包发送给所述客户端设备。
17.一种服务端设备,其特征在于,所述服务端设备包括至少一个处理器、存储器及存储在所述存储器上并可被所述至少一个处理器执行的指令,所述至少一个处理器执行所述指令以实现权利要求1至15任一项所述的基于安卓平台的通讯实现方法。
18.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质包括计算机程序,当所述计算机程序在客户端设备上运行时,使得所述服务端设备执行如权利要求1至15任一项所述的基于安卓平台的通讯实现方法。
19.一种芯片系统,其特征在于,包括芯片,所述芯片与存储器耦合,用于执行所述存储器中存储的计算机程序,以执行权利要求1-15任一项所述的基于安卓平台的通讯实现方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210990374.7A CN115065691B (zh) | 2022-08-18 | 2022-08-18 | 一种基于安卓平台的通讯实现方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210990374.7A CN115065691B (zh) | 2022-08-18 | 2022-08-18 | 一种基于安卓平台的通讯实现方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115065691A CN115065691A (zh) | 2022-09-16 |
CN115065691B true CN115065691B (zh) | 2022-11-01 |
Family
ID=83207591
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210990374.7A Active CN115065691B (zh) | 2022-08-18 | 2022-08-18 | 一种基于安卓平台的通讯实现方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115065691B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN117097795B (zh) * | 2023-10-19 | 2024-01-23 | 飞天诚信科技股份有限公司 | 一种Android智能设备数据通讯方法及装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106102058A (zh) * | 2016-05-30 | 2016-11-09 | 飞天诚信科技股份有限公司 | 一种身份认证方法及装置 |
CN107994928A (zh) * | 2018-01-10 | 2018-05-04 | 飞天诚信科技股份有限公司 | 一种实现蓝牙数据同步收发的方法及通信装置 |
CN111918262A (zh) * | 2020-08-15 | 2020-11-10 | 北京百瑞互联技术有限公司 | 一种快速发现gatt服务的低功耗蓝牙通信的方法及系统 |
CN113271579A (zh) * | 2021-05-24 | 2021-08-17 | 杭州涂鸦信息技术有限公司 | 蓝牙设备控制方法、客户端、计算机设备和可读存储介质 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101378403B (zh) * | 2008-07-02 | 2011-12-07 | 北京航空航天大学 | 一种基于集合的资源通知处理系统及处理方法 |
US10887762B2 (en) * | 2016-10-05 | 2021-01-05 | Lg Electronics Inc. | Method and apparatus for transmitting and receiving data using Bluetooth technology |
CN106484548A (zh) * | 2016-10-20 | 2017-03-08 | 济南浪潮高新科技投资发展有限公司 | 一种基于异步回调机制的动作编排请求响应处理方法 |
US11191115B2 (en) * | 2017-01-23 | 2021-11-30 | Lg Electronics Inc. | Bluetooth communication method and apparatus |
CN111966756B (zh) * | 2020-08-21 | 2024-03-12 | 西安寰宇卫星测控与数据应用有限公司 | 表格数据自动同步方法、装置、计算机设备、存储介质 |
CN114629904B (zh) * | 2022-02-15 | 2024-05-24 | 广州伊智信息科技有限公司 | 一种分布式事件的处理方法、系统、设备及介质 |
-
2022
- 2022-08-18 CN CN202210990374.7A patent/CN115065691B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106102058A (zh) * | 2016-05-30 | 2016-11-09 | 飞天诚信科技股份有限公司 | 一种身份认证方法及装置 |
CN107994928A (zh) * | 2018-01-10 | 2018-05-04 | 飞天诚信科技股份有限公司 | 一种实现蓝牙数据同步收发的方法及通信装置 |
CN111918262A (zh) * | 2020-08-15 | 2020-11-10 | 北京百瑞互联技术有限公司 | 一种快速发现gatt服务的低功耗蓝牙通信的方法及系统 |
CN113271579A (zh) * | 2021-05-24 | 2021-08-17 | 杭州涂鸦信息技术有限公司 | 蓝牙设备控制方法、客户端、计算机设备和可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN115065691A (zh) | 2022-09-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110602087B (zh) | 智能投屏方法、装置、智能终端及服务器 | |
US10779226B2 (en) | Wireless local area network, station, and access point and methods for accessing thereof | |
CN106293887A (zh) | 数据库处理方法及装置 | |
CN107770762B (zh) | 一种建立蓝牙连接的方法及装置 | |
US10425537B2 (en) | Method, apparatus, and system for allocating phone number | |
CN115065691B (zh) | 一种基于安卓平台的通讯实现方法及装置 | |
CN111934961B (zh) | 智能家居网络配置方法、设备及计算机可读存储介质 | |
CN109547524B (zh) | 基于物联网的用户行为存储方法、装置、设备及存储介质 | |
CN112261172A (zh) | 服务寻址访问方法、装置、系统、设备及介质 | |
WO2021042612A1 (zh) | 无线投屏方法、装置、设备及存储介质 | |
CN111263338A (zh) | 蓝牙Mesh网络的配网方法与相关配网设备及系统 | |
US6539540B1 (en) | Methods and apparatus for optimizing simple network management protocol (SNMP) requests | |
US11706301B2 (en) | Server node selection method and terminal device | |
CN110674172A (zh) | 数据查询方法及装置 | |
CN112565461B (zh) | 投屏设备服务代理发现方法、装置、设备及可读存储介质 | |
CN108235083B (zh) | 电视日志信息获取方法及装置 | |
CN109964473B (zh) | 语音业务应答的方法及装置 | |
CN114175702A (zh) | 动态切换网卡 | |
EP4042635A1 (en) | Discovery of which nef or af is serving a ue | |
CN111200651A (zh) | 定时调用微服务的方法、系统、设备和介质 | |
KR100909115B1 (ko) | 네트워크 자동 로그인 시스템 | |
CN112714202B (zh) | 设备配置方法及装置 | |
WO2021082992A1 (zh) | 实例化请求生成方法、接口虚机配置方法、nfvo、vim | |
CN109873882B (zh) | 一种ip代理池管理系统及其管理方法 | |
CN110545527B (zh) | 呼叫转移方法、视频通信服务器及主叫终端 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |