Google Fit Api Android按小时和总运动时间进行每日锻炼

时间:2018-07-15 13:39:26

标签: android google-fit

我目前正在开发一个Android项目,该项目必须从Google Fit API收集每日信息。我进行了很多搜索,但没有找到2个问题的答案:

  • 如何使用数组获取时间。例如,从下午1点到下午2点,我走了100步,从下午2点到下午3点走了200步。
  • 如何获取用户当天锻炼的总时间。

非常感谢您

1 个答案:

答案 0 :(得分:1)

第一点。 如果您通过适当的分段开始时间和结束时间以及存储桶和聚合功能形成数据读取请求,则可以检索每小时的数据存储桶。 下面是我用于检索任何给定开始日期和结束日期的每小时数据的代码。

fun getReadDataRequestBuilderAggregated(startDate: Date, endDate: Date): DataReadRequest? {
        val cal = Calendar.getInstance()
        cal.time = startDate.setDayStartTime()
        var startTime = cal.timeInMillis
        cal.time = endDate.setDayEndTime()
        var endTime = cal.timeInMillis
        return if (startTime>endTime) {
            null
        } else {

            return DataReadRequest.Builder()
                    .aggregate(DataType.TYPE_CALORIES_EXPENDED, DataType.AGGREGATE_CALORIES_EXPENDED)
                    .aggregate(DataType.TYPE_STEP_COUNT_DELTA, DataType.AGGREGATE_STEP_COUNT_DELTA)
                    .bucketByTime(1, TimeUnit.HOURS)
                    .enableServerQueries()
                    .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS).build()
        }
    } 

private fun Date.setDayEndTime(): Date {
        val currentTime = Calendar.getInstance().apply {
            time = this@setDayEndTime
        }

        currentTime.set(Calendar.HOUR_OF_DAY, 23)
        currentTime.set(Calendar.MINUTE, 59)
        currentTime.set(Calendar.SECOND, 59)

        return currentTime.time
    }

    private fun Date.setDayStartTime(): Date {
        val currentTime = Calendar.getInstance().apply {
            time = this@setDayStartTime
        }

        currentTime.set(Calendar.HOUR_OF_DAY, 0)
        currentTime.set(Calendar.MINUTE, 0)
        currentTime.set(Calendar.SECOND, 0)
        currentTime.set(Calendar.MILLISECOND,0)

        return currentTime.time
    }