SDK_APP/BLUETOOTH_FEATURES.md

6.2 KiB
Raw Blame History

蓝牙功能完整特性说明

🚀 功能概述

本应用现已具备完整的蓝牙连接功能,支持真实的心电设备连接和数据接收。

🔧 核心特性

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. 权限申请

  1. 首次点击"连接蓝牙"按钮
  2. 系统弹出权限申请对话框
  3. 选择"允许"授予所有权限

2. 设备扫描

  1. 权限授予后自动开始扫描
  2. 扫描持续10秒
  3. 自动过滤心电相关设备

3. 设备选择

  1. 扫描完成后显示设备列表
  2. 选择目标心电设备
  3. 等待连接建立

4. 数据采集

  1. 连接成功后点击"启动程序"
  2. 观察ECG曲线图显示实时数据
  3. 查看状态信息确认数据接收

🔧 配置参数

蓝牙参数

// 服务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版本

📝 注意事项

  1. 位置权限必需:蓝牙扫描需要位置权限
  2. 设备兼容性确保设备支持BLE或传统蓝牙
  3. 数据格式:确保设备发送的数据格式与解析器兼容
  4. 连接稳定性:保持设备在有效范围内
  5. 电池管理:注意设备电池电量,避免连接中断

🎉 总结

现在你的应用已经具备了完整的蓝牙连接功能:

双模式扫描支持BLE和传统蓝牙 智能过滤:自动识别心电设备 权限管理:完整的权限申请和检查 实时数据:实时接收和显示数据 状态监控:详细的状态和错误提示 界面优化:合理的按钮布局和状态指示

现在可以连接真实的心电设备并开始数据采集了!🎉