Android SDK 概览
Mooting_android_demo 是原生 Android 蓝牙通信示例项目,封装了与 Mooting 智能眼镜的 BLE 通信协议。
项目信息
| 属性 | 值 |
|---|---|
| 项目路径 | app-dev/Mooting_android_demo |
| 语言 | Kotlin / Java |
| 编译 SDK | 34 (Android 14) |
| 最低 SDK | 26 (Android 8.0) |
| Kotlin 版本 | 1.9.0 |
模块架构
Mooting_android_demo/
├── app/ # 主应用模块
│ └── 设备发现与绑定 UI
│
├── BluetoothModule/ # 核心蓝牙通信库
│ ├── core/ # 核心管理器
│ ├── bean/ # 数据类
│ ├── listener/ # 回调接口
│ ├── task/ # 任务管理
│ ├── message/ # 消息协议
│ ├── util/ # 工具类
│ └── libs/
│ └── MetaBluetoothSDK.aar
│
└── DebugModule/ # 调试工具模块
├── 命令测试
├── 音频采集
├── 固件升级
└── 日志查看核心功能
📡 设备发现
- BLE 设备扫描
- 设备类型识别
- 信号强度显示
🔗 设备连接
- GATT 连接管理
- 自动重连机制
- 连接状态监听
📨 命令通信
- 绑定/解绑命令
- 状态查询命令
- 设置同步命令
🔧 调试工具
- 命令发送测试
- 音频数据采集
- 日志查看导出
核心类说明
DeviceManager
设备管理单例,提供主要 API:
kotlin
// 初始化
DeviceManager.init(application)
// 获取实例
val manager = DeviceManager.getInstance()
// 开始扫描
manager.startDiscovery()
// 停止扫描
manager.stopDiscovery()
// 构建设备信息
manager.buildDevice(name, macBle, macBt, token, status)
// 连接设备
manager.connect(userId, token, imei, enableBtConnect)
// 发送命令
manager.sendCmd(cmdRequest)
// 断开连接
manager.disconnect()MetaGlassDeviceGlobal
全局状态和监听器管理:
kotlin
// 添加扫描监听
MetaGlassDeviceGlobal.addGlassDeviceScanListener(listener)
// 添加命令响应监听
MetaGlassDeviceGlobal.addGlassDeviceCmdRspListener(listener)
// 添加连接状态监听
MetaGlassDeviceGlobal.addGlassDeviceConnectListener(listener)设备状态枚举
kotlin
enum class MetaGlassState {
DISCONNECTED, // 未连接
CONNECTING, // 连接中
CONNECTED, // 已连接
CONNECT_FAILED, // 连接失败
RECONNECTING // 重连中
}监听器接口
GlassDeviceScanListener
java
public interface GlassDeviceScanListener {
void onGlassDeviceScanStarted();
void onGlassDeviceScaned(MetaGlassDevice device);
void onGlassDeviceScanFinished();
}GlassDeviceCmdRspListener
java
public interface GlassDeviceCmdRspListener {
void onGlassDeviceCmdRsp(String address, CmdRsp response);
}设备类型
kotlin
enum class DeviceType(val code: String) {
BACH("02150000"), // Bach 系列
PICASSO("02150002") // Picasso 系列
}权限要求
Android 12+ (API 31+)
xml
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT"/>
<uses-permission android:name="android.permission.BLUETOOTH_SCAN"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>Android 11 及以下
xml
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>快速开始
1. 添加依赖
kotlin
// settings.gradle.kts
include(":BluetoothModule")
// app/build.gradle.kts
dependencies {
implementation(project(":BluetoothModule"))
}2. 初始化
kotlin
class MyApplication : Application() {
override fun onCreate() {
super.onCreate()
DeviceManager.init(this)
ToastUtils.init(this)
}
}3. 扫描设备
kotlin
class MainActivity : AppCompatActivity(), GlassDeviceScanListener {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
MetaGlassDeviceGlobal.addGlassDeviceScanListener(this)
}
private fun startScan() {
// 请求权限后
DeviceManager.getInstance().startDiscovery()
}
override fun onGlassDeviceScanStarted() {
// 清空设备列表
}
override fun onGlassDeviceScaned(device: MetaGlassDevice) {
// 添加到列表
}
override fun onGlassDeviceScanFinished() {
// 更新 UI
}
}4. 连接设备
kotlin
private fun connectDevice(device: MetaGlassDevice) {
DeviceManager.getInstance().apply {
buildDevice(
device.name,
device.macBle,
device.macBt,
ByteUtil.getDeviceToken(),
0
)
connect(
userId = 123,
token = deviceToken,
imei = IMEIUtil.getIMEI1(context),
enableBtConnect = true
)
// 发送绑定命令
if (isConnected()) {
sendCmd(CmdReqBind().apply {
timeout_period = 30000
})
}
}
}Gradle 配置
kotlin
// app/build.gradle.kts
android {
namespace = "com.metabounds.demo"
compileSdk = 34
defaultConfig {
minSdk = 26
targetSdk = 34
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = "1.8"
}
buildFeatures {
viewBinding = true
}
}