android Ble开发的那些事(一)

我也是今年刚毕业加入了一家创业公司,正好所做的项目主要就是围绕ble进行的。下面跟大家分享下我对ble的拙见,如有不正确的地方,欢迎指出交流学习。

蓝牙的历史?

1999年5月20日,索尼爱立信、IBM、英特尔、诺基亚及东芝等业界龙头创立蓝牙特别兴趣组(SIG,Special Interest Group),制订蓝牙技术标准。“蓝牙”(Bluetooth)这名称来自10世纪的丹麦国王哈拉尔德(Harald Gormsson)的外号。出身海盗家庭的哈拉尔德统一了北欧四分五裂的国家,成为维京王国的国王。由于他喜欢吃蓝莓,牙齿常常被染成蓝色,而获得“蓝 牙”的绰号,当时蓝莓因为颜色怪异的缘故被认为是不适合食用的东西,因此这位爱尝新的国王也成为创新与勇于尝试的象征。1998年,爱立信公司希望无线通信技术能统一标准而取名“蓝芽”。蓝牙,或称为蓝芽,是一种无线个人局域网(Wireless PAN),最初由爱立信创制,后来由蓝牙技术联盟订定技术标准。据说因为此技术尚在萌芽的阶段,故将Bluetooth以“蓝芽”的中文译名在台湾进行商 业的注册,不过在2006年,该组织已将全球中文统一为“蓝牙”。

什么是Ble?

BLE 是Bluetooth Low Energy的缩写,又叫蓝牙4.0,区别于蓝牙3.0和之前的技术。BLE前身是NOKIA开发的Wibree技术,主要用于实现移动智能终端与周边配件之间的持续连接,是功耗极低的短距离无线通信技术,并且有效传输距离被提升到了100米以上,同时只需要一颗纽扣电池就可以工作数年之久。BLE是在蓝牙技术的基础上发展起来的,既同于蓝牙,又区别于传统蓝牙。BLE设备分单模和双模两种,双模简称BR,商标为Bluetooth Smart Ready,单模简称BLE或者LE,商标为Bluetooth Smart。Android是在4.3后才支持BLE,这可以解释不是所有蓝牙手机都支持BLE,而且支持BLE的蓝牙手机一般是双模的。

Ble的工作原理?

大概知道ble是什么东西后,我们就来了解下他的工作原理。想要了解原理,先搞清楚蓝牙通信之间的关系——主从关系

蓝牙技术规定每一对设备之间进行蓝牙通讯时,必须一个为主角色,另一为从角色,才能进行通信,通信时,必须由主端进行查找,发起配对,建链成功后,双方即可收发数据。理论上,一个蓝牙主端设备,可同时与7个蓝牙从端设备进行通讯。一个蓝牙设备以主模式发起呼叫时,需要知道对方的蓝牙地址,配对密码等信息,配对完成后,可直接发起呼叫。这可以解释为什么有时无法连接蓝牙,有可能是连接的蓝牙设备过多。

蓝牙内部详细的工作原理呢,由于个人能力有限就不详细讲述了,本系列文章主要是介绍下ble在android中的开发。

Ble在android交互中的角色与职责:

Android设备与BLE设备交互有两组角色:就是中心设备与周边设备了。如图所示:

android Ble开发的那些事(一)_第1张图片
Android设备与BLE设备交互有两组角色

一般手机都是做为中央的,那么该怎么用手机获取周边设备的相关数据呢?

Ble开发的大概原理流程:

android Ble开发的那些事(一)_第2张图片
android中ble连接的流程

在android中,对ble设备的操作实际上是对BluetoothGatt的操作,所以我们首先要想办法获取到BluetoothGatt。如图展示,对蓝牙设备的连接过程也就是获取BluetoothGatt的获取过程,大概有以下几步,下面详细讲解下:

1.添加权限(你也知道啦,想要连接ble设备,肯定得获取手机相关的权限使用权啦)

2.扫描Ble设备:

想要扫描设备,首先我们先要拿到BluetoothManager,通过BluetoothManager的getAdapter()方法再拿到BluetoothAdapter,然后再通过BluetoothAdapter的startSacn( LeScanCallback)的方法开始扫描设备。值得注意的是,我们还需要实现LeScanCallback的回调方法。

在其回调方法中会有这么一个函数,onLeScan(BluetoothDevice, rssi, byte[])。当中的bluetoothDevice就是我们扫描的设备;rssi是int类型,代表设备的信号强度,是负的,数值越大代表信号强度越大;byte[]这个byte数组就是设备广播的相关数据(在我们项目中,我们是依靠这个广播来判断我们设备时候在充电状态的,各个设备应该都有自己的商定)。

3.建立连接:

当扫描到我们所需的设备,就可以开始建立连接了。主要是使用上面所扫描到设备的BluetoothDevice.connectGatt(context, boolean, BluetoothGattCallback)的方法进行连接,这个函数将返回BluetoothGatt的实例,到此,我们就拿到了BluetoothGatt了,就可以进行相关读写数据操作了。

连接就讲完啦~~~下次贴上我的代码的,第一篇,写的不好还请见谅,嘿嘿~~后续讲讲读写蓝牙数据,还有蓝牙空中升级(这个折磨挺久的~)

原创作品,如需转载,请与作者联系,否则将追究法律责任。

你可能感兴趣的:(android,ble)