低功耗蓝牙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)给扫描一个时间限制
扫描示例代码如下:
?
如果只是要扫描到特定类型的设备,则使用接口
?
注意:我们既可以扫描BLE设备,也可以扫描普通蓝牙设备,也可以同时将BLE设备和普通蓝牙设备一起扫描到。
3、连接到GATT Server
获取到BluetoothGatt实例,
?
?
其中,discoverService方式是异步的,它的回调方法是上面代码中的onServiceDiscovered。
?
?
?
在获取Service的时候,每个蓝牙设备都会有两个默认的Service,它们和对应的UUID分别如下:
Bluetooth Generic Access Profile {00001800-0000-1000-8000-00805f9b34fb}
Bluetooth Generic Attribute Profile {00001801-0000-1000-8000-00805F9B34FB}
?
如果notificaiton方式对于某个Characteristic是enable的,那么当设备上的这个Characteristic改变时,手机上的
?
6、关闭客户端蓝牙
?
低功耗蓝牙包括的术语及概念:
如上图所示,使用低功耗蓝牙可以包括多个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源码静态类图如下:
使用低功耗蓝牙需要用到的权限:
?
1、准备BLE
1)获取BluetoothAdapter
BluetoothAdapter是从系统服务获取到的,全系统就一个。
?
如果蓝牙未打开,系统会自动打开,会弹出系统框展示打开蓝牙。
?
因为扫描BLE设备是电源密集型操作,浪费电量,因此要保证以下原则:
1)扫描到需要的设备后,马上停止扫描;
2)给扫描一个时间限制
扫描示例代码如下:
?
startLeScan(UUID[], BluetoothAdapter.LeScanCallback),通过UUID来查找设备。
扫描回调的代码如下所示:
?
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()回调就会被促发。如下所示:
?
?
相关文章推荐
- Mac技巧之让U盘、移动硬盘在苹果电脑和Windows PC都能识别/读写,且支持4GB大文件:exFAT格式
- 前端开发注意事项
- 全志A20 DIY
- 内存泄漏以及常见的解决方法
- Light OJ 1110 - An Easy LCS (LCS+字典序最小路径记录)
- 如果Cell设置了 titlelabel Titlelabel会覆盖加在cell上面的其他控件
- kvm+libvirt虚拟机快照浅析
- poj 迷宫问题(简单题)
- Android Design Support Library 的 代码实验——几行代码,让你的 APP 变得花俏
- 字符串生成UUID
- Coded UI Test-创建一个排序的测试组
- 虚幻4UMG的锚点
- java数据结构和算法------栈
- SQLServer BCP 命令的使用
- oracle12c新特点之可插拔数据库(Pluggable Database,PDB)
- iOS设计模式 - MVC
- 小白的苦逼暑假培训预计划
- Servlet--HttpServletResponse的2个操作流的方法
- Android 开发环境下载地址 -- 百度网盘 adt-bundle android-studio sdk adt 下载
- 心情差