6.2 KiB
6.2 KiB
蓝牙功能完整特性说明
🚀 功能概述
本应用现已具备完整的蓝牙连接功能,支持真实的心电设备连接和数据接收。
🔧 核心特性
1. 双模式蓝牙扫描
- BLE扫描:优先使用低功耗蓝牙扫描,更快速、更节能
- 传统蓝牙扫描:兼容不支持BLE的设备
- 自动切换:根据设备能力自动选择扫描模式
2. 智能设备过滤
- 名称过滤:自动识别包含"ECG"、"心电"等关键词的设备
- 设备分类:区分BLE和传统蓝牙设备
- 重复检测:避免重复添加相同设备
3. 实时状态管理
- 连接状态:实时显示连接、断开、扫描等状态
- 权限检查:动态检查蓝牙和位置权限
- 错误处理:友好的错误提示和状态恢复
4. 数据流处理
- 实时接收:自动接收蓝牙设备发送的数据
- 数据解析:将接收的数据传递给现有的数据处理管道
- 实时显示:在ECG曲线图上实时显示接收的数据
📱 用户界面
按钮布局优化
┌─────────────────────────────────────────┐
│ [连接蓝牙] [启动程序] │
│ [停止程序] [陷波滤波] │
└─────────────────────────────────────────┘
状态指示
- 连接蓝牙:绿色(未连接)→ 橙色(扫描中)→ 红色(已连接)
- 启动程序:启用/禁用状态管理
- 停止程序:仅在程序运行时启用
- 陷波滤波:仅在程序运行时启用
🔍 技术实现
扫描机制
// BLE扫描设置
val scanSettings = ScanSettings.Builder()
.setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
.build()
// 设备过滤
if (device.name?.contains("ECG", ignoreCase = true) == true ||
device.name?.contains("心电", ignoreCase = true) == true) {
addDiscoveredDevice(device)
}
权限管理
private val REQUIRED_PERMISSIONS = arrayOf(
Manifest.permission.BLUETOOTH_SCAN,
Manifest.permission.BLUETOOTH_CONNECT,
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION
)
数据流处理
override fun onDataReceived(data: ByteArray) {
// 将蓝牙数据传递给DataManager
dataManager.onBleNotify(data)
updateStatus("接收到蓝牙数据: ${data.size} 字节")
}
🎯 使用流程
1. 权限申请
- 首次点击"连接蓝牙"按钮
- 系统弹出权限申请对话框
- 选择"允许"授予所有权限
2. 设备扫描
- 权限授予后自动开始扫描
- 扫描持续10秒
- 自动过滤心电相关设备
3. 设备选择
- 扫描完成后显示设备列表
- 选择目标心电设备
- 等待连接建立
4. 数据采集
- 连接成功后点击"启动程序"
- 观察ECG曲线图显示实时数据
- 查看状态信息确认数据接收
🔧 配置参数
蓝牙参数
// 服务UUID (根据设备协议调整)
private val SERVICE_UUID = UUID.fromString("0000fff0-0000-1000-8000-00805f9b34fb")
// 特征UUID (根据设备协议调整)
private val CHARACTERISTIC_UUID = UUID.fromString("0000fff1-0000-1000-8000-00805f9b34fb")
// 设备名称前缀
private const val DEVICE_NAME_PREFIX = "ECG"
扫描参数
- 扫描时间:10秒
- 扫描模式:低延迟模式
- 设备过滤:包含"ECG"、"心电"关键词
📊 状态监控
连接状态
蓝牙状态: 正在扫描蓝牙设备...
发现设备: ECG_Device_001 (00:11:22:33:44:55)
蓝牙设备已连接: ECG_Device_001
接收到蓝牙数据: 128 字节
权限状态
权限状态:
BLUETOOTH_SCAN: ✓
BLUETOOTH_CONNECT: ✓
ACCESS_FINE_LOCATION: ✓
ACCESS_COARSE_LOCATION: ✓
🔍 调试功能
日志输出
- 扫描过程:记录设备发现和扫描状态
- 连接过程:记录连接建立和断开
- 数据接收:记录数据包大小和频率
- 错误处理:记录详细错误信息
调试命令
# 查看蓝牙相关日志
adb logcat | grep BluetoothManager
# 查看权限相关日志
adb logcat | grep MainActivity
⚠️ 常见问题
1. 扫描无结果
可能原因:
- 设备不在范围内
- 设备未开启或未处于可发现状态
- 权限未正确授予
解决方法:
- 确认设备距离和状态
- 检查权限设置
- 重启设备和应用
2. 连接失败
可能原因:
- 设备被其他应用占用
- 设备电池电量不足
- 服务UUID不匹配
解决方法:
- 关闭其他蓝牙应用
- 检查设备电量
- 确认设备协议
3. 数据接收异常
可能原因:
- 数据格式不匹配
- 连接不稳定
- 设备发送频率过高
解决方法:
- 检查数据解析逻辑
- 优化连接稳定性
- 调整数据处理频率
🔮 未来改进
1. 功能增强
- 自动重连:连接断开时自动尝试重连
- 多设备支持:同时连接多个设备
- 数据缓存:本地缓存数据防止丢失
2. 用户体验
- 设备管理:保存常用设备列表
- 连接优化:优化连接速度和稳定性
- 界面美化:更直观的状态显示
3. 技术优化
- 协议适配:支持更多设备协议
- 性能优化:减少电池消耗
- 兼容性:支持更多Android版本
📝 注意事项
- 位置权限必需:蓝牙扫描需要位置权限
- 设备兼容性:确保设备支持BLE或传统蓝牙
- 数据格式:确保设备发送的数据格式与解析器兼容
- 连接稳定性:保持设备在有效范围内
- 电池管理:注意设备电池电量,避免连接中断
🎉 总结
现在你的应用已经具备了完整的蓝牙连接功能:
✅ 双模式扫描:支持BLE和传统蓝牙 ✅ 智能过滤:自动识别心电设备 ✅ 权限管理:完整的权限申请和检查 ✅ 实时数据:实时接收和显示数据 ✅ 状态监控:详细的状态和错误提示 ✅ 界面优化:合理的按钮布局和状态指示
现在可以连接真实的心电设备并开始数据采集了!🎉