zoukankan      html  css  js  c++  java
  • Android BLE 蓝牙低功耗教程,中央BluetoothGatt和周边BluetoothGattServer的实现

    Android4.3 规范了BLE的API,但是直到目前的4.4,还有些功能不完善。

    在BLE协议中,有两个角色,周边(Periphery)和中央(Central);周边是数据提供者,中央是数据使用/处理者;在iOS SDK里面,可以把一个iOS设备作为一个周边,也可以作为一个中央;但是在Android SDK里面,直到目前最新的Android4.4.2,Android手机只能作为中央来使用和处理数据;那数据从哪儿来?从BLE设备来,现在的很多可穿戴设备都是用BLE来提供数据的。

    一个中央可以同时连接多个周边,但是一个周边某一时刻只能连接一个中央。

    大概了解了概念后,看看Android BLE SDK的四个关键类(class):

    a) BluetoothGattServer作为周边来提供数据;BluetoothGattServerCallback返回周边的状态。

    b) BluetoothGatt作为中央来使用和处理数据;BluetoothGattCallback返回中央的状态和周边提供的数据。

    因为我们讨论的是Android的BLE SDK,下面所有的BluetoothGattServer代表周边,BluetoothGatt代表中央。

              

    一.创建一个周边(虽然目前周边API在Android手机上不工作,但还是看看)

     a)先看看周边用到的class,蓝色椭圆

    b)说明:

    每一个周边BluetoothGattServer,包含多个服务Service,每一个Service包含多个特征Characteristic。

    1.new一个特征:character = new BluetoothGattCharacteristic(
    UUID.fromString(characteristicUUID),
    BluetoothGattCharacteristic.PROPERTY_NOTIFY,
    BluetoothGattCharacteristic.PERMISSION_READ);

    2.new一个服务:service = new BluetoothGattService(UUID.fromString(serviceUUID),
    BluetoothGattService.SERVICE_TYPE_PRIMARY);

    3.把特征添加到服务:service.addCharacteristic(character);

    4.获取BluetoothManager:manager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);

    5.获取/打开周边:BluetoothGattServer server = manager.openGattServer(this,
    new BluetoothGattServerCallback(){...}); 

    6.把service添加到周边:server.addService(service);

    7.开始广播service:Google还没有广播Service的API,等吧!!!!!所以目前我们还不能让一个Android手机作为周边来提供数据。

     

    二.创建一个中央(这次不会让你失望,可以成功创建并且连接到周边的)

    a)先看看中央用到的class,蓝色椭圆

     

    b)说明:

    为了拿到中央BluetoothGatt,可要爬山涉水十八弯:

    1.先拿到BluetoothManager:bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);

    2.再拿到BluetoothAdapt:btAdapter = bluetoothManager.getAdapter();

    3.开始扫描:btAdapter.startLeScan( BluetoothAdapter.LeScanCallback);

    4.从LeScanCallback中得到BluetoothDevice:public void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord) {.....}

    5.用BluetoothDevice得到BluetoothGatt:gatt = device.connectGatt(this, true, gattCallback);

    终于拿到中央BluetoothGatt了,它有一堆方法(查API吧),调用这些方法,你就可以通过BluetoothGattCallback和周边BluetoothGattServer交互了。

     

    Demo工程下载地址:http://download.csdn.net/detail/jimoduwu/7072515

     

    From: http://blog.csdn.net/jimoduwu/article/details/21604215

  • 相关阅读:
    那些离不开的 Chrome 扩展插件
    Spring Boot 实战 —— 入门
    Maven 学习笔记
    Linux lvm 分区知识笔记
    Linux 双向 SSH 免密登录
    CentOS Yum 源搭建
    Ubuntu 系统学习
    iOS 测试三方 KIF 的那些事
    Swift 网络请求数据与解析
    iOS Plist 文件的 增 删 改
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/4685285.html
Copyright © 2011-2022 走看看