Hello!!!BLE

参考: http://www.jianshu.com/p/2268cfedc051

诠释:BLE:Bluetooth Low Energy 蓝牙低功耗技术 android 在4.3 (SDK VERSION >= 18)中引进了对BLE的支持(android手机必须系统版本4.3及以上才支持BLE API)

简介: BLE不支持音频。

蓝牙有传统蓝牙和低功耗蓝牙(ble)之分,蓝牙发展至今经历的版本的更新。1.1、1.2、2.0、2.1、3.0、4.0、4.1、4.2 等。那么在1.x~3.0之间的我们称之为传统蓝牙,4.x开始的蓝牙我们称之为低功耗蓝牙也就是蓝牙ble,当然4.x版本的蓝牙也是向下兼容的。android手机必须系统版本4.3及以上才支持BLE API。低功耗蓝牙较传统蓝牙,覆盖范围更广,安全性更高,延迟更短,耗电极低等等优点。
我们知道,现在移动设备上使用的蓝牙大多是4.0。而蓝牙 4.0 有两个分支,经典 4.0 和 BLE4.0,经典 4.0 就是传统的3.0 蓝牙升级而成,向下兼容。而 BLE 4.0 是一个新的分支,不向下兼容。

Hello!!!BLE_第1张图片
00000.jpeg

重要的:蓝牙 4.0 实现传统蓝牙、低耗能蓝牙和高速蓝牙的融合,支持双模式和单模式两种应用方式。双模式是将低耗能蓝牙功能和传统蓝牙(2.1+EDR/3.0+HS)功能的集成,对应“Bluetooth Smart Ready”商标,可用于手机、平板电脑、个人电脑及电视机等;单模式仅支持低耗能蓝牙技术,对应“Bluetooth Smart”商标,面向高度集成、紧凑的设备,可用于心率监测仪、计步器等使用纽扣式电池、收集特定信息的感应器类电子设备。

蓝牙低能耗架构共有两种芯片构成:单模芯片和双模芯片

Hello!!!BLE_第2张图片
00000.jpeg

相较于经典蓝牙,BLE的优点是快速搜索,快速连接,超低功耗保持连接和传输数据,缺点是数据传输速率低,物理带宽只有 1M,实际传输速度在 1~6KB 之间。

角色:为了创建和维持一个BLE连接,引入了“角色”这一概念。一个BLE设备不是集中器角色就是外围设备角色,这是根据是谁发起这个连接来确定的。集中器设备总是连接的发起者,而外围设备总是被连接者。集中器和外围设备的关系就像链路层中的主机和从机的概念。

职责:属于一种个人近场无线网络技术,专为可穿戴设备、智能硬件、智能家居等设计。

名词:

一: GATT (Generic Attribute Profile 通用属性协议)GATT构建在ATT的基础之上,因此也总被成为GATT/ATT
二: ATT(Attribute Protocol 属性协议)
三:UUID(Universally Unique Identifier 通用 唯一 识别码)标准的UUID格式为:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12),可以从cflib 下载CreateGUID() UDF进行转换。每个 x 是 0-9 或 a-f 范围内的一个十六进制的数字。UUID最少在3000+年内不会重复。

四:GATT中的Service,Characteristic, Descriptor三者之间的关系图

Hello!!!BLE_第3张图片
00001.png
Hello!!!BLE_第4张图片
00002.png

BLE权限:

        
        
        如果想声明你的app只为具有BLE的设备提供,在manifest文件中包括:

        
        但是如果想让你的app提供给那些不支持BLE的设备,需要在manifest中包括上面代码并设置required="false",然后在运行时可以通过使用PackageManager.hasSystemFeature()确定BLE的可用性。

        // 使用此检查确定BLE是否支持在设备上,然后你可以有选择性禁用BLE相关的功能
        if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
             Toast.makeText(this, R.string.ble_not_supported, Toast.LENGTH_SHORT).show();
             finish();
        }

知识点:

一: BleLib中的关键类:(BleLib是Android低功耗蓝牙4.0及以上开发的辅助库,一行代码解决Ble初始化、扫描、连接、特性读写、设置通知等操作。
BleLib支持单个Ble连接或多个Ble设备同时连接。)

      BleService是单个Ble连接操作的服务类
      GattAttributes类中包含了蓝牙联盟规定的服务和特征的UUID值
      MultipleBleService类是可多个蓝牙设备同时连接的服务类

二: 判断当前设备是否支持蓝牙BLE
检查当前手机是否支持ble 蓝牙,如果不支持退出程序

     if(!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
          Toast.makeText(this, R.string.ble_not_supported, Toast.LENGTH_SHORT).show();
          finish();
      }

三: 获取了bluetoothmanager
通过BluetoothManager来获取BluetoothAdapter

    BluetoothManager bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);

四:获取蓝牙的适配器 BluetoothAdapter:
可以通过以下两种方式获取

      final BluetoothManager bluetoothManager = (BluetoothManager)getSystemService(Context.BLUETOOTH_SERVICE);  //获取了bluetoothmanager 
      BluetoothAdapter mBluetoothAdapter = bluetoothManager.getAdapter();
      BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();     
      //如果mBluetoothAdapter == null,说明设备不支持蓝牙

重点介绍BluetoothAdapter:

  1. BluetoothAdapter类简单点来说就是代表了本设备(外设)
  2. 开关蓝牙设备
    扫描蓝牙设备
    设置/获取蓝牙状态信息,例如:蓝牙状态值、蓝牙Name、蓝牙Mac地址等;

五:开启BLE

    if (!mBleAdapter.isEnabled()) {  
               Intent mBleIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);  
               this.startActivityForResult(mBleIntent, REQUEST_ENABLE_BLE);  
    }
    开启蓝牙功能也可以使用
    mBleAdapter.enable(); 
    两者的区别: enable()方式打开蓝牙不需要用户确认,但打开蓝牙之后不能立即连接设备。BluetoothAdapter.ACTION_REQUEST_ENABLE的方式在打开蓝牙后可立即进行连接,但是需要用户确认。

开撸:

BLE坑集锦:
一: https://race604.com/android-ble-tips/

补充说明:
因为wifi传输速度虽然快但是耗电量相对比较大。
可穿戴式设备需求的传输带宽非常低。
并且蓝牙4.0以上的耗电量可以说是相当低。
从功耗带宽各方面考虑,蓝牙更适合问题中的场景。

// http://blog.csdn.net/u010924834/article/details/49491349
实现智能控制的方法,我了解到的有两种:
一种是通过wifi或者2G、3G、4G网络将手机和智能设备连接起来,实现打开,关闭,设定等操作。
一种是通过蓝牙将手机和智能设备连接起来,实现设备的打开、关闭等操作。(市面主流)

你可能感兴趣的:(Hello!!!BLE)