Google Fit API获取骑行活动时无距离数据问题求助
问题描述
使用版本
implementation "com.google.android.gms:play-services-fitness:21.1.0"
客户端定义
GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .requestScopes(Scope("https://www.googleapis.com/auth/fitness.activity.read"), Scope("https://www.googleapis.com/auth/fitness.location.read")) .requestIdToken(BuildConfig.GOOGLE_FIT_CLIENT_ID) .requestServerAuthCode(BuildConfig.GOOGLE_FIT_CLIENT_ID, true) .build() val readRequest = DataReadRequest.Builder() .read(DataType.TYPE_ACTIVITY_SEGMENT) .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS) .build()
当前通过上述请求可获取骑行活动的数据集、数据点,但仅包含起止时间与活动类型,无距离数据。然而在Google Fit应用中查看同一活动时,却能显示距离信息。
解决方案
TYPE_ACTIVITY_SEGMENT仅记录活动的类型、起止时间等元数据,距离属于衍生数据,存储在单独的DataType中,需要修改请求逻辑来获取:
第一步:在
DataReadRequest中添加读取距离对应的DataType
Google Fit中存储骑行距离的核心类型是DataType.TYPE_DISTANCE_DELTA,该类型记录的是时间段内的距离增量。修改后的请求代码如下:val readRequest = DataReadRequest.Builder() .read(DataType.TYPE_ACTIVITY_SEGMENT) // 保留活动段信息 .read(DataType.TYPE_DISTANCE_DELTA) // 添加读取距离增量 .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS) .build()第二步:关联活动段与距离数据
获取数据后,你可以通过时间范围匹配,将同一骑行活动段对应的所有TYPE_DISTANCE_DELTA数据点的数值累加,得到该活动的总距离。进阶优化:按活动段自动分组
如果希望直接获取每个活动段对应的汇总距离,可以使用按活动段分桶的请求,Google Fit会自动帮你把对应活动段的距离数据聚合:val readRequest = DataReadRequest.Builder() .bucketByActivitySegment(1, TimeUnit.MILLISECONDS) // 按活动段分组 .read(DataType.TYPE_DISTANCE_DELTA) .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS) .build()处理返回的
Bucket时,每个桶会关联对应的活动段信息,以及该段的总距离。
注意:你的权限配置已经包含fitness.location.read,满足读取距离数据的权限要求,无需额外添加权限。
内容的提问来源于stack exchange,提问作者nKognito
相关产品推荐
相关产品推荐

