连续签到天数:1天 签到总天数:495天 签到总奖励:7030金币 
 
 
 
马上注册,享用更多功能,让你轻松玩转社区。 您需要 登录  才可以下载或查看,没有账号?立即注册   
 
× 
 
一、GATT的概念:   Generic Attribute Profile (GATT)   通过BLE连接,读写属性类小数据的Profile通用规范。现在所有的BLE应用Profile都是基于GATT的。   Attribute Protocol (ATT)   GATT是基于ATT Protocol的。ATT针对BLE设备做了专门的优化,具体就是在传输过程中使用尽量少的数据。每个属性都有一个唯一的UUID,属性将以characteristics and services的形式传输。   Characteristic   Characteristic可以理解为一个数据类型,它包括一个value和0至多个对次value的描述(Descriptor)。   Descriptor   对Characteristic的描述,例如范围、计量单位等。   Service   Characteristic的集合。例如一个service叫做“Heart Rate Monitor”,它可能包含多个Characteristics,其中可能包含一个叫做“heart rate measurement"的Characteristic。  二、GATT的角色和职责:     Android设备与BLE设备交互有两组角色:   中心设备和外围设备(Central vs. peripheral);   GATT server vs. GATT client.   Central vs. peripheral:   中心设备和外围设备的概念针对的是BLE连接本身。Central角色负责scan advertisement。而peripheral角色负责make advertisement。   GATT server vs. GATT client:   这两种角色取决于BLE连接成功后,两个设备间通信的方式。   举例说明:   现 有一个活动追踪的BLE设备和一个支持BLE的Android设备。Android设备支持Central角色,而BLE设备支持peripheral角 色。创建一个BLE连接需要这两个角色都存在,都仅支持Central角色或者都仅支持peripheral角色则无法建立连接。   当 连接建立后,它们之间就需要传输GATT数据。谁做server,谁做client,则取决于具体数据传输的情况。例如,如果活动追踪的BLE设备需要向 Android设备传输sensor数据,则活动追踪器自然成为了server端;而如果活动追踪器需要从Android设备获取更新信息,则 Android设备作为server端可能更合适。 三、权限及feature:   和经典蓝牙一样,应用使用蓝牙,需要声明BLUETOOTH权限,如果需要扫描设备或者操作蓝牙设置,则还需要BLUETOOTH_ADMIN权限:   <uses-permission android:name="android.permission.BLUETOOTH"/>   除了蓝牙权限外,如果需要BLE feature则还需要声明uses-feature:   <uses-feature android:name="android.hardware.bluetooth_le" android:required="true"/>   按时required为true时,则应用只能在支持BLE的Android设备上安装运行;required为false时,Android设备均可正常安装运行,需要在代码运行时判断设备是否支持BLE feature:   // Use this check to determine whether BLE is supported on the device. Then 四、Android连接GATT Server:   两个设备通过BLE通信,首先需要建立GATT连接。这里我们讲的是Android设备作为client端,连接GATT Server。   连接GATT Server,你需要调用BluetoothDevice的connectGatt() BluetoothGattCallback    mBluetoothGatt = device.connectGatt(this, false, mGattCallback);   函数成功,返回BluetoothGatt BluetoothGattCallback    BluetoothGatt常规用到的几个操作示例:   connect() :连接远程设备。   discoverServices() : 搜索连接设备所支持的service。   disconnect():断开与远程设备的GATT连接。   close():关闭GATT Client端。   readCharacteristic(characteristic) :读取指定的characteristic。   setCharacteristicNotification(characteristic, enabled) :设置当指定characteristic值变化时,发出通知。   getServices() :获取远程设备所支持的services。   等等。   注:   1、某些函数调用之间存在先后关系。例如首先需要connect上才能discoverServices。   2、 一些函数调用是异步的,需要得到的值不会立即返回,而会在BluetoothGattCallback的回调函数中返回。例如 discoverServices与onServicesDiscovered回调,readCharacteristic与 onCharacteristicRead回调,setCharacteristicNotification与 onCharacteristicChanged回调等。    
查看全部评分 
 
 
楼主热帖