您的位置:首页 > 其它

低功耗蓝牙BLE

2015-07-10 16:45 281 查看
摘要 Android4.3以上加入了低功耗蓝牙,可以大大节省设备功耗。

低功耗蓝牙包括的术语及概念:





如上图所示,使用低功耗蓝牙可以包括多个Profile,一个Profile中有多个Service,一个Service中有多个Characteristic,一个Characteristic中包括一个value和多个Descriptor。

Android中进行蓝牙开发需要使用到的类的执行过程是:

1、使用BluetoothAdapter.startLeScan来扫描低功耗蓝牙设备

2、在扫描到设备的回调函数中会得到BluetoothDevice对象,并使用BluetoothAdapter.stopLeScan停止扫描

3、使用BluetoothDevice.connectGatt来获取到BluetoothGatt对象

4、执行BluetoothGatt.discoverServices,这个方法是异步操作,在回调函数onServicesDiscovered中得到status,通过判断status是否等于BluetoothGatt.GATT_SUCCESS来判断查找Service是否成功

5、如果成功了,则通过BluetoothGatt.getService来获取BluetoothGattService

6、接着通过BluetoothGattService.getCharacteristic获取BluetoothGattCharacteristic

7、然后通过BluetoothGattCharacteristic.getDescriptor获取BluetoothGattDescriptor

Android Bluetooth源码静态类图如下:





使用低功耗蓝牙需要用到的权限:

?
下面介绍怎样使用BLE:

1、准备BLE

1)获取BluetoothAdapter

BluetoothAdapter是从系统服务获取到的,全系统就一个。

?
2)检测蓝牙是否打开

如果蓝牙未打开,系统会自动打开,会弹出系统框展示打开蓝牙。

?
2、查找BLE设备

因为扫描BLE设备是电源密集型操作,浪费电量,因此要保证以下原则:

1)扫描到需要的设备后,马上停止扫描;

2)给扫描一个时间限制

扫描示例代码如下:

?
如果只是要扫描到特定类型的设备,则使用接口
startLeScan(UUID[],
BluetoothAdapter.LeScanCallback),通过UUID来查找设备。


扫描回调的代码如下所示:


?
注意:我们既可以扫描BLE设备,也可以扫描普通蓝牙设备,也可以同时将BLE设备和普通蓝牙设备一起扫描到。

3、连接到GATT Server

获取到BluetoothGatt实例,

?
具体实例如下:


?

其中,discoverService方式是异步的,它的回调方法是上面代码中的onServiceDiscovered。

?
?


4、读BLE属性


一旦获取到GATT的Services,就可以读写他们的属性了,实例如下:


?

在获取Service的时候,每个蓝牙设备都会有两个默认的Service,它们和对应的UUID分别如下:

Bluetooth Generic Access Profile {00001800-0000-1000-8000-00805f9b34fb}

Bluetooth Generic Attribute Profile {00001801-0000-1000-8000-00805F9B34FB}

5、收到GATT通知


如果设备主动给手机发信息,则可以通过notification的方式,这种方式不用
1bd81
手机去轮询地读设备上的数据。手机可以用如下方式给设备设置notification功能。


?

如果notificaiton方式对于某个Characteristic是enable的,那么当设备上的这个Characteristic改变时,手机上的
onCharacteristicChanged()
回调就会被促发。如下所示:

?
6、关闭客户端蓝牙

?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: