1. 蓝牙服务发现概述
1.1. 蓝牙服务发现流程
蓝牙服务发现的流程主要涉及到BLE技术中的GATT(通用属性配置文件)协议。蓝牙服务发现的流程是一个涉及多个步骤的复杂过程,需要客户端和服务器之间的紧密协作。通过这个过程,客户端可以获取到服务器上的服务、特征和描述符的详细信息,进而实现数据的读取、写入和通知等功能。以下是蓝牙服务发现流程的详细步骤:
1.2. 建立连接
-
首先,BLE客户端需要通过connectGatt API与BLE服务器建立连接。连接成功后,客户端和服务器之间会建立一个加密的通道,用于后续的数据传输。
1.3. 启动服务发现
-
连接建立后,客户端会调用相应的API(discoverServices)来启动服务发现过程。这个过程中,客户端会会向GATT服务器发送请求,以发现服务器上的所有主要服务(Primary Service)。这个过程中,客户端会发送多个请求/响应(Req/Resp)对,以获取所有服务的详细信息。
1.4. 解析服务列表
-
服务器收到服务发现请求后,会将其支持的所有服务列表发送给客户端。客户端收到服务列表后,会解析这些服务,获取每个服务的UUID和其他相关信息。
1.5. 发现特征(Characteristic)
-
对于每个发现的服务,客户端会进一步发送请求以发现该服务下的所有特征(Characteristic)。这些特征包含了可以读取、写入或通知的数据。
1.6. 发现描述符(读取/写入/订阅特征)
-
一旦发现特征,客户端就可以根据需要读取或写入特征的值,或者订阅特征的通知/指示。这样,当特征的值发生变化时,服务器会主动通知客户端。
1.7. 处理发现结果
-
客户端在收到服务、特征和描述符的发现结果后,会根据应用的需求进行相应的处理。例如,更新UI、存储数据或触发其他逻辑。
1.8. 注意事项
-
安全性:在整个服务发现过程中,客户端和服务器之间的通信都是加密的,以确保数据的安全性。但是在发现过程中,可以配置是否需要对通信进行加密或验证。
-
缓存机制:bluedroid协议栈实现会缓存发现的结果,以便在回连时快速恢复状态。
-
权限:在发现过程中,客户端需要具有足够的权限来访问服务器上的服务和特征。
-
性能:服务发现可能会受到设备性能、蓝牙信号强度和网络环境等因素的影响。