文章目录
前言
以前一直忙于不断的做项目,总是觉得没有必要抽时间出来写博客,但看到业界的很多大牛都有坚持写博客的习惯,自己也应该向大佬们看齐才有机会成为大牛。其实坚持写博客的好处还是不少的,一方可以作为自己对所学知识的一个总结归纳,另外一个方面可以作为和其他人的一个技术分享交流,好处多多。但万事开头难,希望自己能坚持下来,keep moving!
之前也做过几个Ble的项目,现在来对这一块做一个简单的介绍和总结。
传统蓝牙 VS Ble蓝牙
在Android中蓝牙根据协议主要分为两种:一种是基于spp协议的传统蓝牙或者叫经典蓝牙,另外一种就是Android 4.3才引进的基于GATT协议的BLE(Bluetooth Low Energy)低功耗蓝牙,相比较于传统蓝牙其主要优点就是功耗低,搜索、连接速度相对较快,那是不是说相较于传统蓝牙它就没有缺点呢?答案是否定的,相较于传统蓝牙而言,Ble的数据传输效率低,每次可以传输的数据量小得多,单次最多只能传输20个byte,而传统蓝牙单次可传输的数据量远不止于此,但也正是由于功耗低这一主要优点,使得现在ble被广泛应用于智能穿戴设备、智能锁、心率测量仪等领域 (本文主要介绍的是ble蓝牙,若要了解spp协议蓝牙的相关开发,可以查看我我另一篇博客蓝牙开发(二)----- 基于SPP蓝牙协议的Android应用开发)。
cosplay 角色扮演
在BLE协议中,有两个角色,周边(Periphery)和中央(Central)。周边是数据的提供者,中央是数据的使用和处理者。在Android SDK里面,Android4.3以后手机只能作为中央设备使用,直到Android5.0以后手机才可以作为周边设备使用,即此时的手机既可以作为BLE周边设备来为中央提供数据,也可以作为中央设备接收处理周边其它蓝牙设备传递过来的数据进行处理。 一个中央设备可以同时连接多个周边设备,但一个周边设备某一时刻只能连接一个中央设备。
一些基本概念
- GATT协议
我们已经知道了Ble是基于GATT协议的,那么什么是GATT协议呢?下面就来简单介绍一下:
GATT是Generic Attributes的缩写,也就是通用属性的意思,它是ble低功耗蓝牙设备之间的标准通信协议。根据蓝牙技术官网的介绍,GATT协议定义了一个分层数据结构,该结构暴露给连接的Ble设备进行通信。其数据分层结构如下图所示:
简单描述一下结构图的意思就是:Profile是一组服务(Service)的集合,这个文件包含广播的种类、所使用的连接间隔、所需的安全等级等配置信息,每个Service下面可以包含多个特征(characteristic),每个特征包含属性(properties)和值(value),还可以包含多个描述(descriptor)。
-
Service
服务是特征和与其它服务关系的集合。每个Service包含一个或多个characteristic,每个Service由一个唯一的UUID标识,UUID可以分为两种:一种是经过官方认证的16位UUID,另外一种是由开发者自己定义的128位的UUID,类似于0x0000xxxx-0000-1000-8000-00805F9B34FB,这是蓝牙技术联盟定义的一个基本格式,蓝牙模块的开发者通常只要定义xxxx的部分即可,开发时通常由硬件或嵌入式工程师会告诉我们该模块包含哪些Service及其对应的UUID。 -
Characteristic
特征被定义为包含单个值的属性类型。和Service一样,Characteristic也是由一个UUID进行标识,通常也是由硬件或嵌入式工程师提供。Characteristic是我们进行数据通信的一个重要载体,我们的数据读、写、通知等都通过这个类来实现,是比较重要的一个类。
这里就只介绍Service和Char