本文简要介绍如何在Android中进行BLE device的读写,实验平台Android 7, 编译SDK 28(android 9).
本文说明在Android BLE Connect connect到device后继续进行数据读写.
获取读写对象
Characteristic
通过UUID从service中找到要读写的Characteristic,例如我这里打算读温度
1 | private static final UUID TEMPE_CHARACTERISTIC_UUID = UUID.fromString("00002A6E-0000-1000-8000-00805f9b34fb"); |
Descriptor
通过UUID从Characteristic中找到要读写的Descriptor,例如我这里打算读温度传感器测量的Trigger方式
1 | private static final UUID EST_DESCRIPTOR_UUID = UUID.fromString("0000290d-0000-1000-8000-00805f9b34fb"); |
读&写
值得注意的是无论读写都是异步的,在调用读/写API后需要等到回调执行后才能再调用读/写API,如果回调发生之前调用读/写API无效
Characteristic
读
1 | //发起读 |
回调中通过getValue有下面几种方式,这个需要根据使用的GATT profiles定义或自定义的Characteristic 的Value格式来决定给用那种
- byte[] getValue()
- Integer getIntValue(int formatType, int offset)
- Float getFloatValue(int formatType, int offset)
- String getStringValue(int offset)
写
Characteristic的写和Descriptor类似,见后面Descriptor的说明,步骤大致如下:
1 | //写入 |
和getXXXValue,写入也有对应的一组
- boolean setValue(byte[] value)
- boolean setValue(int value, int formatType, int offset)
- boolean setValue(int mantissa, int exponent, int formatType, int offset)
- boolean setValue(String value)
Descriptor
读
1 | //发起读 |
与Characteristic不一样Descriptor的读取数据只有byte[] getValue() ,那回的是ram数据完全靠自己解析
写
1 | //写入 |
和Descriptor读一样,写入也只有boolean setValue(byte[] value),需要又使用者自己控制raw数据
参考
https://developer.android.com/guide/topics/connectivity/bluetooth-le#read