SDK_APP/BLUETOOTH_FEATURES.md

229 lines
6.2 KiB
Markdown
Raw Normal View History

2025-09-02 17:34:23 +08:00
# 蓝牙功能完整特性说明
## 🚀 功能概述
本应用现已具备完整的蓝牙连接功能,支持真实的心电设备连接和数据接收。
## 🔧 核心特性
### 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和传统蓝牙
**智能过滤**:自动识别心电设备
**权限管理**:完整的权限申请和检查
**实时数据**:实时接收和显示数据
**状态监控**:详细的状态和错误提示
**界面优化**:合理的按钮布局和状态指示
现在可以连接真实的心电设备并开始数据采集了!🎉