# 蓝牙功能完整特性说明

## 🚀 功能概述

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

## 🔧 核心特性

### 1. 双模式蓝牙扫描
- **BLE扫描**：优先使用低功耗蓝牙扫描，更快速、更节能
- **传统蓝牙扫描**：兼容不支持BLE的设备
- **自动切换**：根据设备能力自动选择扫描模式

### 2. 智能设备过滤
- **名称过滤**：自动识别包含"ECG"、"心电"等关键词的设备
- **设备分类**：区分BLE和传统蓝牙设备
- **重复检测**：避免重复添加相同设备

### 3. 实时状态管理
- **连接状态**：实时显示连接、断开、扫描等状态
- **权限检查**：动态检查蓝牙和位置权限
- **错误处理**：友好的错误提示和状态恢复

### 4. 数据流处理
- **实时接收**：自动接收蓝牙设备发送的数据
- **数据解析**：将接收的数据传递给现有的数据处理管道
- **实时显示**：在ECG曲线图上实时显示接收的数据

## 📱 用户界面

### 按钮布局优化
```
┌─────────────────────────────────────────┐
│  [连接蓝牙]    [启动程序]                │
│  [停止程序]    [陷波滤波]                │
└─────────────────────────────────────────┘
```

### 状态指示
- **连接蓝牙**：绿色（未连接）→ 橙色（扫描中）→ 红色（已连接）
- **启动程序**：启用/禁用状态管理
- **停止程序**：仅在程序运行时启用
- **陷波滤波**：仅在程序运行时启用

## 🔍 技术实现

### 扫描机制
```kotlin
// 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)
}
```

### 权限管理
```kotlin
private val REQUIRED_PERMISSIONS = arrayOf(
    Manifest.permission.BLUETOOTH_SCAN,
    Manifest.permission.BLUETOOTH_CONNECT,
    Manifest.permission.ACCESS_FINE_LOCATION,
    Manifest.permission.ACCESS_COARSE_LOCATION
)
```

### 数据流处理
```kotlin
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. 查看状态信息确认数据接收

## 🔧 配置参数

### 蓝牙参数
```kotlin
// 服务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: ✓
```

## 🔍 调试功能

### 日志输出
- **扫描过程**：记录设备发现和扫描状态
- **连接过程**：记录连接建立和断开
- **数据接收**：记录数据包大小和频率
- **错误处理**：记录详细错误信息

### 调试命令
```bash
# 查看蓝牙相关日志
adb logcat | grep BluetoothManager

# 查看权限相关日志
adb logcat | grep MainActivity
```

## ⚠️ 常见问题

### 1. 扫描无结果
**可能原因**：
- 设备不在范围内
- 设备未开启或未处于可发现状态
- 权限未正确授予

**解决方法**：
- 确认设备距离和状态
- 检查权限设置
- 重启设备和应用

### 2. 连接失败
**可能原因**：
- 设备被其他应用占用
- 设备电池电量不足
- 服务UUID不匹配

**解决方法**：
- 关闭其他蓝牙应用
- 检查设备电量
- 确认设备协议

### 3. 数据接收异常
**可能原因**：
- 数据格式不匹配
- 连接不稳定
- 设备发送频率过高

**解决方法**：
- 检查数据解析逻辑
- 优化连接稳定性
- 调整数据处理频率

## 🔮 未来改进

### 1. 功能增强
- **自动重连**：连接断开时自动尝试重连
- **多设备支持**：同时连接多个设备
- **数据缓存**：本地缓存数据防止丢失

### 2. 用户体验
- **设备管理**：保存常用设备列表
- **连接优化**：优化连接速度和稳定性
- **界面美化**：更直观的状态显示

### 3. 技术优化
- **协议适配**：支持更多设备协议
- **性能优化**：减少电池消耗
- **兼容性**：支持更多Android版本

## 📝 注意事项

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

## 🎉 总结

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

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

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