之前的文档寄了,现在用这个记录一下BLE实际操作中遇到的问题。
1.在写服务端的时候会有两个回调,一个叫AdvertiseCallback,一个叫gattServiceCallback。第一个是服务端与客户端通过蓝牙建立连接之后的回调(服务端–>客户端),后者是客户端连接上服务端之后的回调,是连接成功之后才会发生的回调。在后者的回调里面,我们所需要的数据在此进行交换。
BLE官方文档
一:基本介绍
Android 在API18/Android4.3版本开始为低功耗蓝牙 (BLE) 提供内置平台支持,并提供应用程序可用于发现设备、查询服务和传输信息的 API。
利用低功耗蓝牙可以实现:1.在附近的硬件设备之间传输少量数据。2.与接近传感器交互,为用户提供基于其当前位置的定制服务。
与经典蓝牙相比,BLE 旨在显着降低功耗。这允许应用程序与具有更严格电源要求的 BLE 设备进行通信,例如接近传感器、心率监测器和健身设备。
另外需要注意的是,当用户使用 BLE 将他们的设备与另一台设备配对时,用户设备上的所有应用程序都可以访问这两个设备之间通信的数据。 出于这个原因,如果应用程序捕获了敏感数据,应该实施应用程序层安全性以保护该数据的隐私。
二.关键术语和概念
支持BLE的设备要在彼此之间传输数据,它们必须首先形成一个通信通道。使用蓝牙 LE API 需要在清单文件中声明多个权限。一旦你的应用程序获得使用蓝牙的权限,您的**应用程序需要访问蓝牙适配器并确定设备上的蓝牙是否可用。**如果蓝牙可用,设备将扫描附近的 BLE 设备。找到设备后,通过连接到 BLE 设备上的 GATT 服务器来发现 BLE 设备的功能。建立连接后,可以根据可用服务和特征与连接的设备传输数据。 以下是需要添加的权限:
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<!-- android M 以上版本获取周边蓝牙设备必须定位权限 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-feature
android:name="android.hardware.bluetooth_le"
android:required="true" />
1.通用属性配置文件 (GATT)
GATT 配置文件是用于通过 BLE 链路发送和接收称为“属性”的短数据片段的通用规范。当前所有的 BLE 应用配置文件都基于 GATT。下面的网址是GitHub 上的 Android BluetoothLeGatt 示例。 https://github.com/android/connectivity-samples/tree/master/BluetoothLeGatt
2.Profiles
蓝牙 SIG 为 BLE 设备定义了许多配置文件(Profiles)。配置文件是关于设备如何在特定应用程序中工作的规范。一台设备可以实现多个配置文件。例如,设备可能包含心率监测器和电池电量检测器。
3.Attribute Protocol (ATT)
GATT 建立在属性协议 (ATT) 之上。这也称为 GATT/ATT。 ATT 针对在 BLE 设备上运行进行了优化。为此,它使用尽可能少的字节。每个属性都由通用唯一标识符 (UUID) 唯一标识,它是用于唯一标识信息的字符串 ID 的标准化 128 位格式。 ATT 传输的属性被格式化为特征和服务。
4.特征(Descriptor)
特征包含单个值和描述特征值的 0-n 个描述符。一个特性可以被认为是一种类型,类似于一个类。描述符是描述特征值的已定义属性。例如,描述符可能指定人类可读的描述、特征值的可接受范围或特定于特征值的度量单位。
5.服务(Service)
服务是特征的集合。例如,你可以拥有一项名为“心率监测器”的服务,其中包括“心率测量”等特征。你可以在 bluetooth.org 上找到现有的基于 GATT 的配置文件和服务的列表。
三.角色和职责 (Roles and responsibilities)
当设备与 BLE 设备交互时,适用以下角色和职责:
中央与外设。这适用于 BLE 连接本身。**中心角色的设备扫描,寻找广告,外围角色的设备制作广告。**在之后的示例代码中也有设计到广告的定义。
GATT 服务器与 GATT 客户端。这决定了两个设备在建立连接后如何相互通信。要区别它们的不同,假设有一部 Android 手机和一个 BLE 设备的活动跟踪器。电话支持中心角色;活动跟踪器支持外围角色。如果要建立 BLE 连接,您需要包含这两者,仅支持外围设备的两个设备无法相互通信,两个仅支持中央设备的设备也不能相互通信。
一旦手机和活动跟踪器建立连接,它们就会开始相互传输 GATT 元数据。根据他们传输的数据类型,其中一个可能充当服务器。例如,如果活动跟踪器想要向手机报告传感器数据,则活动跟踪器充当服务器可能是有意义的。如果活动跟踪器想要从手机接收更新,那么手机充当服务器可能是有意义的。
在本主题中使用的示例中,应用程序(在 Android 设备上运行)是 GATT 客户端。该应用程序从 GATT 服务器获取数据,该服务器是支持心率配置文件的 BLE 心率监视器。您也可以设计您的应用程序来扮演 GATT 服务器角色。
|