如何通过Android版Fit API从Google Fit获取活动记录的UID?
获取Google Fit活动记录唯一标识的实现方法
针对不同类型的活动数据,获取唯一标识的方式如下:
- 活动段(ActivitySegment):每条ActivitySegment自带全局唯一标识符,可通过
activitySegment.getIdentifier()直接获取。读取历史数据时,从DataPoint的FIELD_ACTIVITY_SEGMENT字段解析出ActivitySegment对象后即可调用该方法。 - 数据点(DataPoint):DataPoint没有直接提供独立UID,但可通过组合以下信息生成唯一标识:
- 数据源流ID:
dataPoint.getOriginalDataSource().getStreamId() - 数据点时间戳:
dataPoint.getTimestamp() - 数据点起始时间:
dataPoint.getStartTime()
三者结合足以保证同一数据源下的DataPoint不重复;若需跨数据源唯一性,可额外加入数据类型名称dataPoint.getDataType().getName()。
- 数据源流ID:
- 会话(Session):Session对象本身带有唯一ID,通过
session.getId()即可获取,该ID由Google Fit自动分配或创建会话时自定义生成。
代码示例
读取活动段并获取唯一ID
// 构建活动段读取请求 DataReadRequest readRequest = new DataReadRequest.Builder() .read(DataType.TYPE_ACTIVITY_SEGMENT) .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS) .build(); // 执行同步请求(也可使用异步回调) DataReadResult dataReadResult = Fitness.HistoryApi.readData(mGoogleApiClient, readRequest) .await(1, TimeUnit.MINUTES); if (dataReadResult.getStatus().isSuccess()) { for (DataSet dataSet : dataReadResult.getDataSets()) { for (DataPoint dataPoint : dataSet.getDataPoints()) { // 解析ActivitySegment对象 ActivitySegment segment = dataPoint.getValue(Field.FIELD_ACTIVITY_SEGMENT).asActivitySegment(); // 获取唯一标识 String uniqueId = segment.getIdentifier(); // 后续业务处理 } } }
读取会话并获取唯一ID
SessionReadRequest sessionRequest = new SessionReadRequest.Builder() .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS) .readSessionsFromAllApps() .build(); SessionReadResult sessionResult = Fitness.SessionsApi.readSession(mGoogleApiClient, sessionRequest) .await(1, TimeUnit.MINUTES); for (Session session : sessionResult.getSessions()) { String sessionUniqueId = session.getId(); // 后续业务处理 }
注意事项
- 确保应用已申请对应权限:需包含
ACTIVITY_RECOGNITION权限,以及通过FitnessOptions配置对应数据类型的读取权限(如ACCESS_READ)。 - 若使用异步请求,需在
OnDataReadListener或OnSessionReadListener的回调中处理返回数据。
内容的提问来源于stack exchange,提问作者Serdar Büyükkanlı
相关产品推荐
相关产品推荐

