• 谷歌 蓝牙4.0工作流程


    谷歌于13年7月25日正式发布Android 4.3 操作系统,支持Bluetooth 4.0,搭载Bluetooth Low Energy/BLE技术。根据谷歌官网,SDK提供的demo开发,一共有一下几个步骤:

    1、初始化BLE

    2、搜索BLE设备

    3、连接支持通用属性协议的设备

    4、读取BLE属性

    5、接收设备数据

    6、关闭

    每一步具体操作如下:

    Step1:初始化BLE

    1)得到一个本地适配器:BluetoothAdapter

    2)启动蓝牙:if (!mBluetoothAdapter.isEnabled()) {

       Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);

       startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT); }

    Step2:搜索BLE设备

    1)调用startLeScan()BluetoothAdapter.LeScanCallback作为参数,由于扫描非常耗电,所以需要设定一个扫描时间,且一旦发现目标设备,停止扫描。

    2)如果想扫描已知的具体目标,可以使用startLeScan(UUID[], BluetoothAdapter.LeScanCallback)

    直接给出一组uuid去扫描。

    Step3:连接支持GATT的设备(GATT Server)

    1)实例化一个BluetoothGatt 对象,如(mBluetoothGatt),

    BluetoothGatt mBluetoothGatt = device.connectGatt(this, false, mGattCallback);

    它有三个参数(对象,布尔变量,mGattcallback,mGattcallbackBluetoothGattcallback的一个引用,该对象用来指导手机端APP的操作(GATTclient

    private final BluetoothGattCallback  mGattCallback = new BluetoothGattCallback() {

        public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {}

        public void onServicesDiscovered(BluetoothGatt gatt, int status) {}

     

        public void onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic, int status) {} //实现从设备端读取数据

        public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic) {}

    }; //mGattCallback 有四个方法,分别是状态连接改变,低功耗设备发现,数据读,数据改变通知

    2)BluetoothGattCallback 传递数据到APP,比如连接状态,以及更多的app操作

    Step4:读取BLE属性

    1)读取设备的名字和地址

    Step5:接收GATT通知

    1)setCharacteristicNotification() 通知APP,设备端的产生变化

    public void onCharacteristicChanged(BluetoothGatt gatt, BluetoothGattCharacteristic) {}

    //实现数据写

    Step6:关闭程序,解除连接

     

     

     

     

    GATT API工作流程图:

     

    解读官方提供的demo:(主要是设备连接那一块)

    1BLE app 提供DeviceControlActivity 进行连接,显示数据和GATT设备以及设备支持的一些属性特征,该活动主要和BluetoothLeService通信,并通过安卓的BLE APT BEL设备进行交互。

    2)当特定的某个反馈触发,将调用合适的broadcastUpdate() 方法,并传递一个动作

    3)回到DeviceControlActivity 上面的四个事件由BroadcastRecevier进行处理

     

  • 相关阅读:
    CSUOJ 1081 集训队分组
    HDU 1865 More is Better
    HDU 1325 Is It A Tree?
    HDU 1272 小希的迷宫
    CSUOJ 1217 奇数个的那个数
    CSUOJ 1010 Water Drinking
    CSUOJ 1162 病毒
    CodeForces 295B
    CodeForces 20C
    SPOJ MULTQ3
  • 原文地址:https://www.cnblogs.com/spring87/p/4378724.html
Copyright © 2020-2023  润新知