订阅Movesense设备获取RR间隔时触发404 NOT FOUND错误求助
解决Movesense设备订阅RR间隔时404 NOT FOUND错误
核心问题分析
报错显示POST请求suunto://MDS/EventListener返回404,说明当前订阅的URI格式错误、设备未正确连接,或者MDS服务未正确初始化,导致无法找到事件监听端点。结合你使用的mdsflutter 2.1.1和Awario设备,以下是针对性的解决方案:
解决方案
1. 修正订阅URI与参数格式
mdsflutter的MdsAsync.subscribe方法第一个参数应为设备的专属URI,而非全局的suunto://MDS/EventListener。同时需确保订阅合约格式正确,包含必要的字段。调整代码如下:
final String deviceUri = "suunto://$DeviceSerialNumber"; // 生成正确的订阅合约 final String hrContract = '''{ "Uri": "/Meas/HR", "Format": "Json" }'''; _hrSubscription = MdsAsync.subscribe(deviceUri, hrContract) .listen((event) { Map<String, dynamic> body = event["Body"]; final rrData = body['rrData'] as List<dynamic>; if (rrData.isNotEmpty) { final rrValue = rrData[0]; print("RR [ms]: $rrValue"); rrIntervalList.add(rrValue); } });
若你仍使用formatContractToJson函数,需确认其输出的JSON包含"Uri": "/Meas/HR"和"Format": "Json"字段,且无格式错误。
2. 确保设备已成功连接
订阅操作必须在设备连接完成后执行。在订阅前添加连接校验逻辑:
// 先确认设备连接状态 bool isConnected = await MdsAsync.isConnected(deviceUri); if (isConnected) { // 执行订阅逻辑 } else { // 先发起连接 await MdsAsync.connect(deviceUri); // 再执行订阅 }
3. 先启用心率测量服务
部分Movesense设备需要先通过PUT请求启用心率测量,才能订阅到数据:
// 设置测量间隔(单位:毫秒,根据需求调整) await MdsAsync.put( "$deviceUri/Meas/HR", '''{"Interval": 1000}''' ); // 等待服务启动后再订阅 await Future.delayed(const Duration(milliseconds: 500));
4. 验证设备固件兼容性
- 确认Awario设备的固件版本支持
/Meas/HR路径返回rrData字段,旧固件可能需要升级。 - 使用MDS Explorer工具(桌面端)连接设备,手动测试
/Meas/HR的订阅,确认设备本身能正常输出RR间隔数据。
5. 升级mdsflutter插件
mdsflutter 2.1.1可能存在兼容性问题,尝试升级到最新版本,确保插件与设备固件、iOS系统版本匹配。
调试建议
- 查看日志中是否有设备连接成功的提示,确认MDS服务已正常启动。
- 若使用MDS Explorer测试正常,但代码仍报错,检查Flutter项目的权限配置(如蓝牙权限)是否完整。
内容的提问来源于stack exchange,提问作者Revathi H Y
相关产品推荐
相关产品推荐

