Garmin Monkey C自定义字段无法写入.fit文件活动报告求助
Garmin自定义字段未出现在.fit文件活动报告的解决方案
针对你遇到的自定义字段在运行时创建但未出现在.fit文件活动报告的问题,以下是几个关键排查点和修复方案:
1. 确认字段ID完全一致
XML配置中的fitField id="0"必须和代码里的JUMPS_COUNTER_FIELD_ID常量值完全匹配。检查你的代码中是否正确定义:
const JUMPS_COUNTER_FIELD_ID = 0;
ID不匹配的话,Garmin无法将代码字段与XML配置关联,自然不会在报告中显示。
2. 检查MESG_TYPE的选择与数据提交时机
你使用了MESG_TYPE_SESSION,这属于会话级数据,只会在会话结束时写入一次。需注意:
- 必须在会话结束时调用
stop()和save(),否则会话数据不会写入.fit文件:
function endActivity() { if (_session != null) { // 确保最后一次更新字段数据 _customJumpsCounterField.setData(_jumpCount); _session.stop(); _session.save(); _session = null; } }
- 如果需要在活动过程中实时记录跳跃次数,建议改用
MESG_TYPE_RECORD(记录级数据),修改代码中的:mesgType参数:
_customJumpsCounterField = _session.createField( "Jumps", JUMPS_COUNTER_FIELD_ID, FitContributor.DATA_TYPE_UINT32, { :mesgType=>FitContributor.MESG_TYPE_RECORD, :units=>"jumps" } );
3. 验证字符串资源定义
确认strings.xml中已正确定义对应标签和单位:
<strings> <string id="jumps_label">Jumps</string> <string id="jumps_units">jumps</string> </strings>
缺失字符串资源可能导致字段在报告中无法正常显示。
4. 排查字段初始化逻辑
确保resumeActivity()在活动启动时被正确调用,可添加日志验证字段是否初始化成功:
System.println("Custom field initialized: " + (_customJumpsCounterField != null));
5. 检查权限与活动类型
确认应用已声明ActivityRecording权限,且选择的"Skateboarding"活动类型支持自定义字段。若测试仍有问题,可切换为通用活动类型验证。
内容的提问来源于stack exchange,提问作者Skorejen
相关产品推荐
相关产品推荐

