BLE 通信
Android SDK 的蓝牙低功耗 (BLE) 通信协议说明。
BLE 架构
┌─────────────────────────────────────────────────────────────┐
│ 应用层 │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ DeviceManager │ │
│ └─────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ MetaBluetoothSDK │ │
│ │ • GATT 客户端 │ │
│ │ • 服务发现 │ │
│ │ • 特征值读写 │ │
│ └─────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Android BLE API │ │
│ │ • BluetoothAdapter │ │
│ │ • BluetoothGatt │ │
│ │ • BluetoothGattCallback │ │
│ └─────────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Mooting 智能眼镜 │ │
│ └─────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘设备扫描
启动扫描
kotlin
// 请求权限后启动扫描
DeviceManager.getInstance().startDiscovery()扫描回调
kotlin
class MainActivity : GlassDeviceScanListener {
override fun onGlassDeviceScanStarted() {
// 扫描开始,清空设备列表
deviceList.clear()
adapter.notifyDataSetChanged()
}
override fun onGlassDeviceScaned(device: MetaGlassDevice) {
// 发现设备
deviceList.add(device)
adapter.notifyItemInserted(deviceList.size - 1)
}
override fun onGlassDeviceScanFinished() {
// 扫描结束
showMessage("扫描完成,发现 ${deviceList.size} 个设备")
}
}停止扫描
kotlin
DeviceManager.getInstance().stopDiscovery()设备连接
连接流程
1. buildDevice() ──→ 构建设备信息
2. connect() ──→ 发起 GATT 连接
3. 服务发现 ──→ 发现 BLE 服务和特征
4. sendCmd(Bind) ──→ 发送绑定命令
5. 等待响应 ──→ 处理绑定结果代码示例
kotlin
private fun connectDevice(device: MetaGlassDevice) {
val dm = DeviceManager.getInstance()
// 1. 构建设备
dm.buildDevice(
device.name,
device.macBle,
device.macBt,
ByteUtil.getDeviceToken(),
0
)
// 2. 发起连接
dm.connect(
userId = getUserId(),
token = getToken(),
imei = IMEIUtil.getIMEI1(this),
enableBtConnect = true
)
// 3. 发送绑定命令
if (dm.isConnected()) {
dm.sendCmd(CmdReqBind().apply {
timeout_period = 30000
})
}
}连接状态
状态枚举
kotlin
enum class MetaGlassState {
DISCONNECTED, // 已断开
CONNECTING, // 连接中
CONNECTED, // 已连接
CONNECT_FAILED, // 连接失败
RECONNECTING // 重连中
}状态监听
kotlin
MetaGlassDeviceGlobal.addGlassDeviceConnectListener { state ->
when (state) {
MetaGlassState.CONNECTED -> showMessage("连接成功")
MetaGlassState.DISCONNECTED -> showMessage("已断开")
MetaGlassState.CONNECT_FAILED -> showMessage("连接失败")
else -> {}
}
}数据传输
发送命令
kotlin
// 发送命令
DeviceManager.getInstance().sendCmd(CmdReqGetBattery())接收响应
kotlin
MetaGlassDeviceGlobal.addGlassDeviceCmdRspListener { address, response ->
when (response.type) {
CmdType.CMD_GET_BATTERY_INFO -> {
val battery = response as CmdRspBattery
showBatteryLevel(battery.level)
}
CmdType.CMD_BIND -> {
handleBindResponse(response)
}
}
}MTU 协商
优化数据传输效率:
kotlin
MetaGlassDeviceGlobal.addGlassDeviceMtuListener { mtu ->
Log.d("BLE", "MTU negotiated: $mtu")
}SPP 通信
串口协议 (Serial Port Profile) 支持:
kotlin
// 连接 SPP
MetaSPPManager.getInstance().connectSPP()
// 关闭 SPP
MetaSPPManager.getInstance().closeSPP()
// 监听 SPP 状态
MetaSPPManager.getInstance().addSPPConnectListener { connected ->
if (connected) {
Log.d("SPP", "SPP connected")
}
}断开连接
kotlin
DeviceManager.getInstance().disconnect()