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