BleDelegate
com.roumai.myodecoder.device.ble.BleDelegate
Overview
接口 BleDelegate
用于处理蓝牙连接、断开、数据传输等操作。
如果开发者需要继承该接口实现自定义的蓝牙连接过程(比如兼容 Windows 等其他平台时), 我们强烈建议开发者在继承该接口前深入了解关于低功耗蓝牙 BLE5.4 开发的相关知识。
Constructors
接口没有构造器,我们提供了一个默认的实例化类:BleDelegateDefaultImpl
,该类针对 Android 做了特定实现和适配,可以开箱即用。
val device = // 从 MyoBleFinder 扫描到的任一设备
val delegate: BleDelegate = BleDelegateDefaultImpl(device)
Functions
#connect/0
连接设备。
返回值类型 | 描述 |
---|---|
Boolean | 连接是否成功 |
val success = delegate.connect()
if (success) {
// 连接成功
}
#disconnect/0
断开设备连接。
返回值类型 | 描述 |
---|---|
Boolean | 断开是否成功 |
val success = delegate.disconnect()
if (success) {
// 断开成功
}
#isConnected/0
判断设备是否已连接。
返回值类型 | 描述 |
---|---|
Boolean | 是否已连接 |
val connected = delegate.isConnected()
if (connected) {
// 已连接
}
#read/1
读取特定 UUID 的特征值。
参数 | 类型 | 描述 |
---|---|---|
key | BleDelegateKey | 目标描述符唯一 Key 值,包含 service 和 characteristic 的 UUID |
返回值类型 | 描述 |
---|---|
ByteArray | 读取到的结果,以字节数组形式访问 |
// 该值在 MyoDecoder 项目中已被定义,开发者可以直接使用
val KEY_BATTERY = BleDelegateKey(
service = ParcelUuid.fromString("0000180f-0000-1000-8000-00805f9b34fb"),
characteristic = ParcelUuid.fromString("00002a19-0000-1000-8000-00805f9b34fb"),
)
val data = delegate.read(KEY_BATTERY)
// data == [78] // 78 即为电量值
#write/2
对特定服务下的特征进行写入操作。
参数 | 类型 | 描述 |
---|---|---|
key | BleDelegateKey | 目标描述符唯一 Key 值,包含 service 和 characteristic 的 UUID |
data | ByteArray | 需要写入的数据 |
返回值类型 | 描述 |
---|---|
Boolean | 写入是否成功 |
val data = byteArrayOf(0x01, 0x02, 0x03)
val success = delegate.write(KEY_DEMO, data)
if (success) {
// 写入成功
}
#subscribe/2
订阅特定服务下的特征,当特征值发生变化时会回调。
参数 | 类型 | 描述 |
---|---|---|
key | BleDelegateKey | 目标描述符唯一 Key 值,包含 service 和 characteristic 的 UUID |
callback | (ByteArray) -> Unit | 回调函数 |
返回值类型 | 描述 |
---|---|
Boolean | 订阅是否成功 |
delegate.subscribe(KEY_EMG) { rawData ->
Log.i(TAG, "EMG raw data: $rawData")
}
#unsubscribe/1
取消订阅特定服务下的特征。
参数 | 类型 | 描述 |
---|---|---|
key | BleDelegateKey | 目标描述符唯一 Key 值,包含 service 和 characteristic 的 UUID |
返回值类型 | 描述 |
---|---|
Boolean | 取消订阅是否成功 |
val success = delegate.unsubscribe(KEY_EMG)
if (success) {
// 取消订阅成功
}
#rssi/0
获取当前设备的信号强度。
返回值类型 | 描述 |
---|---|
Int | 信号强度值(dBm) |
val rssi = delegate.rssi()
Log.i(TAG, "RSSI: ${rssi}dBm")
#mtu/1
设置当前设备的最大传输单元(MTU)。
参数 | 类型 | 描述 |
---|---|---|
mtu | Int | 最大传输单元值(一般建议越大越好,常用设置为 500 左右) |
返回值类型 | 描述 |
---|---|
Boolean | 设置是否成功 |
val success = delegate.mtu(502)
if (success) {
// 设置成功
}