Android之Ble低功耗蓝牙开发

Android开发之ble蓝牙

2017-08-16  本文已影响0人  晨海宝

前言

由于自己工作中需要开发ble的项目,于是在折腾了一段时间后也有所了解,便想写下来分享给大家,同时对自己的知识也是一种巩固

1.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通信,常用在手机上,android4.3和IOS4.0之后版本都支持BR,也就是双模设备。单模只能和BR和单模的设备通信,不能和传统蓝牙通信,由于功耗低,待机长,所以常用在手环的智能设备上。

2.连接流程

android的ble连接流程图.png
private LeScanCallback mLeScanCallback = new LeScanCallback() {
    @Override
          public void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord) {
                   Log.i(TAG, "onLeScan() DeviceName------>"+device.getName());  
                       
                   if(device.getName() == null){  
                           return;
                   }
                  if (device.getName().contains("xxxxx")) {    //做设备过滤
                             mBluetoothDevice = device;   //获取到周边设备
                           stopLeScan(); //停止        
                 } 
      }
};

上文已经成功连接ble设备,接下的数据交互操作,需要了解GATT(最后我会贴出全部代码)


3.什么是GATT?

GATT全称Generic Attribute Profile,中文名叫通用属性协议,它定义了services和characteristic两种东西来完成低功耗蓝牙设备之间的数据传输。它是建立在通用数据协议Attribute Protocol (ATT),之上的,ATT把services和characteristic以及相关的数据保存在一张简单的查找表中,该表使用16-bit的id作为索引。

一旦两个设备建立了连接,GATT就开始发挥作用,同时意味着GAP协议管理的广播过程结束了。但是必须要知道的是,建立GATT连接必要经过GAP协议。

最重要的事情,GATT连接是独占的,也就意味着一个BLE周边设备同时只能与一个中心设备连接。一旦周边设备与中心设备连接成功,直至连接断开,它不再对外广播自己的存在,其他的设备就无法发现该周边设备的存在了。

周边设备和中心设备要完成双方的通信只能通过建立GATT连接的方式。

GATT图解.png

一个ble蓝牙设备有多个包括多个Profile
一个Profile中有多个服务Service(通过服务的uuid找到对应的Service)
一个Service中有多个特征Characteristic(通过特征的uuid找到对应的Characteristic)
一个Characteristic中包括一个value和多个Descriptor(通过Descriptor的uuid找到对应的Descriptor)
UUID一般硬件工程师会告诉你的!!!

4.如何开发?

 <!--  位置权限-->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <!-- 蓝牙权限 -->
    <uses-permission android:name="android.permission.BLUETOOTH"/>
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
    <uses-feature
        android:name="android.hardware.bluetooth_le"
        android:required="true" />
发指令收广播.jpg

END


如果你就得帮助到你了,请点个赞吧!

上一篇下一篇

猜你喜欢

热点阅读