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

  • 相关阅读:
    最小二乘拟合(转)good
    会议论文重新投稿算不算侵权?这肯定是所多人都遇到过的问题(转)
    吝啬的国度
    压力单位MPa、Psi和bar之间换算公式
    Oracle建立表空间和用户
    layoutSubviews总结
    C++中出现的计算机术语4
    445port入侵具体解释
    hdu
    ORM框架
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/4685285.html
Copyright © 2011-2022 走看看