常州开发安卓手机APP蓝牙硬件设备实践分享

常州开发安卓手机APP蓝牙硬件设备实践分享
2020年06月29日 15:22 常州中吴网

今天分享的主题是 Android 上低功耗蓝牙设备的开发实践。这个主题比较小众。常州开发蓝牙硬件设备连接APP、小程序公司http://www.66dianzan.com点个赞科技在过去的几年多的时间里,主要是在做低功耗蓝牙相关的开发。接触过程中发现,BLE 的开发和通常的 Android APP 的开发有点不一样,这里需要访问硬件资源,而且涉及到一些协议相关的内容,而且这方面的资料也比较少。今天我从 Android 开发者的角度,来分享一下低功耗蓝牙开发实践。

今天分享的内容,主要包含如下几个部分:首先对蓝牙和低功耗蓝牙做一个简单的介绍;然后介绍 Android 上对低功耗蓝牙的支持;再介绍一下在 Android 平台上可以开发哪些低功耗蓝牙应用;最后,总结一下所谓的“最佳实践”,低功耗蓝牙开发的一些小经验。

说到蓝牙,就不得不说蓝牙技术联盟(Bluetooth SIG),它负责蓝牙规范制定和推广的国际组织。做蓝牙相关产品的,少不了和它打交道。蓝牙技术联盟同时也拥有蓝牙商标,如果要使用,需要通过他们的授权。

我们回到蓝牙技术本身。蓝牙它有哪些特点呢?首先,近距离通信,典型距离是10米以内,传输速度最高可达24 Mbps,支持多连接,安全性高,非常适合用智能设备上。

简单介绍一下蓝牙的版本演进。99年蓝牙1.0发布,后来发布的蓝牙2.1使用最广的,现在绝大部分蓝牙产品都是这个版本,也是我们所谓的经典蓝牙。蓝牙3.0,也就是所谓的高速蓝牙,最高传输速度可达24Mbps。蓝牙4.0/4.1在这个版本中引入了低功耗蓝牙。蓝牙5.0也发布了,主要是针对物联网方向的改进。

下面介绍一下低功耗蓝牙,它的全称是 Bluetooth Low Energy,简称为 BLE。从名字可以看出,它的最大特点就是低功耗,一些 BLE 设备可以用一个纽扣电池使用一两年。还有一些其他的有点,例如成本低呀,连接速度快呀,安全性高呀。另外,低功耗不是没有缺点的,低功耗意味着低传输速率,它被设计就是用来传输少量数据的。总体来说,低功耗蓝牙非常适合用在可穿戴设备或者物联网上。

下面我们看一下 BLE 的协议栈,作为 Android 开发者,我们不必理解 BLE 的协议栈每个细节,这里大概介绍一下协议架构。我们都知道,协议一般都是分层设计的。BLE 协议栈也不例外。我们来看一下这个图。整个协议栈大致分为三部分,从下到上分别为,控制器(Controller)→主机(Host)→应用(Applications)。

接下来,我们来看一下 Android 平台上对低功耗蓝牙的支持。

从 Android 4.3 Jelly Bean,也就是 API 18才开始支持低功耗蓝牙。这时支持 BLE 的 Central 模式,也就是我们在上面 GAP 中说的,Android 设备只能作为中心设备去连接其他设备。从 Android 5.0开始才支持外设模式。

Android SDK 中 BLE 相关的 API 都在 android.bluetooth.*下面,同时在 Android 5.0也引入了一些也需要用到 android.bluetooth.le*下面的 API。

例如,在前面介绍的 GATT 定义的一些概念,都有对应的类,例如 BluetoothGatt/BluetoothGattService/BluetoothGattCharacteristic 等。有了前面的介绍,我们就能很容易的理解这些类的作用。

另外,要在 APP 中使用蓝牙功能,需要在 Manifest 中申请蓝牙相关的权限。在 Android 6.0及以上平台中,还需要申请定位权限。为什么会这样?因为 BLE 确实有定位的能力,我们后面会讲到。

下面我们来看一下,Android 上蓝牙实现的架构。我们来看右边这个图,这是 Android 上一个非常经典的层级结构。最下面硬件部分,可以使用各厂家的具体实现,通过硬件抽象层(HAL)接口统一连接到 Android AOSP 中,通过 JNI 提供 Java 访问接口。蓝牙服务运行在 com.android.bluetooth 进程中,最后通过 Binder 机制向客户端,也就是 APP 提供相关的 API。

接下来介绍一下 Android 上能够使用 BLE 做一些哪些事情,开发一些什么应用?

BLE 应用可以分为两大类:基于非连接的和连接的。

基于非连接的,这种应用就是依赖 BLE 的广播,也叫作 Beacon。这里有两个角色,发送广播的一方叫做 Broadcaster,监听广播的一方叫 Observer。

基于连接的,就是通过建立 GATT 连接,收发数据。这里也有两个角色,发起连接的一方,叫做中心设备—Central,被连接的设备,叫做外设—Peripheral。

最后我们来总结一下,Android 中 BLE 开发一些所谓的最佳实践。

首先,我们要尽量少干一些事情。因为蓝牙的硬件资源有限,对芯片的请求当然是越少越好。另外,BlueDroid 还很年轻,上层对它的压力也是越小越好。我们在保证业务的情况下,可以尽量遵循如下一些原则:尽量少的连接数量,尽量短的连接时间,尽量少的扫描,至于尽量少的 ClientIf,如果在 APP 中多个模块中都要扫描或者连接,应该做尽可能的合并。

尽量少的广播数据,尽量少的并行请求,在回调中要做尽量少的工作。

另外,我们需要尽量多做一些事情。蓝牙虽然是一个统一的标准,但是不同厂家实现之间还是有一定的差距,例如 MTK 和高通平台是有些不一样的。另外,蓝牙这一块,不同的 ROM 厂家都会有一些修改,需要在不同的 ROM 上都要做一些测试,最后连接的外设,实现也不太一样,也需要做尽量多的测试。

Bluetooth 还在快速的发展,不管是蓝牙规范的制定,还是 Android 平台对蓝牙的支持,给了我们开发者提供了更多的空间和可能性,期待 Android BLE 能够出现更多好用好玩的应用。

财经自媒体联盟

新浪首页 语音播报 相关新闻 返回顶部