【问题标题】:Tracking total number of steps for current day using Google's FIT API使用 Google 的 FIT API 跟踪当天的总步数
【发布时间】:2020-05-16 17:00:47
【问题描述】:

我正在尝试使用 Google 的 FIT API 获取当天的总步数。我正在使用来自https://developers.google.com/android/reference/com/google/android/gms/fitness/HistoryClient的代码sn-ps

这是我从该页面使用的特定代码 sn-p

    val currentTime = Calendar.getInstance()
        val midNight = Calendar.getInstance()
        val now = Date()
        midNight.apply {
            time = now
            set(Calendar.MILLISECOND, 0)
            set(Calendar.SECOND, 0)
            set(Calendar.MINUTE, 0)
            set(Calendar.HOUR, 0)
        }

        val response: Task<DataReadResponse> =
        Fitness.getHistoryClient(context, GoogleSignIn.getLastSignedInAccount(context)!!)
            .readData(
                DataReadRequest.Builder()
                    .read(TYPE_STEP_COUNT_DELTA)
                    .setTimeRange(
                        midNight.timeInMillis,
                        currentTime.timeInMillis,
                        TimeUnit.MILLISECONDS
                    )
                    .bucketByTime(1, TimeUnit.DAYS)
                    .build()
            )

//        val readDataResult: DataReadResponse? = Tasks.await(response)
        .addOnSuccessListener {
                Log.d("Test", "Buckets "+it.buckets.toString())

                for (bucket in it.buckets) {
                    Log.d("Test","Bucket "+bucket)
                    val dataSets = bucket.dataSets
                    for (dataSet in dataSets) {
                        Log.d("Test","dp's"+dataSet.dataPoints.toString())
                        for (dataPoint in dataSet.dataPoints) {
                            Log.d("Datapoint", dataPoint.toString())
                        }
                    }
                }
            }
            .addOnFailureListener{
                Log.d("Test","Failed "+it.toString())
            }

根据 google sn-p,我不得不暂停主线程,但这也会引发错误。所以我已经注释了代码,而是使用了 onSuccessListener

桶里的数据是

Buckets [Bucket{startTime=1589814000000, endTime=1589818566423, activity=4, dataSets=[DataSet{d:step_count.delta:gms:overlay_explicit_input_local []}], bucketType=time, serverHasMoreData=true}]

Bucket Bucket{startTime=1589814000000, endTime=1589818566423, activity=4, dataSets=[DataSet{d:step_count.delta:gms:overlay_explicit_input_local []}], bucketType=time, serverHasMoreData=true}

但数据点为空。 (我想这是存储步骤的地方)

dp's[]

【问题讨论】:

  • 你能解释一下为什么你不能使用midnight.getMillis()和now.getMillis()吗?
  • 我已经编辑了内容。它会引发“未解决的引用”错误
  • 你的代码中声明了这些变量吗?
  • 没有。我以为它们是内置变量。我不知道应该声明什么类型的变量。如果它是日历类型,我对如何设置时间限制感到困惑。我可以获取当前时间,但我正在考虑如何设置它,以便可以从当天的午夜到一天结束(当天上午 12:00 到晚上 11:59)收集数据。
  • 看代码,setTimeRange允许你指定TimeUnit,上面的例子使用TimeUnit.MILLISECONDS,这可能是这个用例最方便的选项。使用 Java 的 API 以毫秒为单位获取当前时间是微不足道的,您应该能够立即计算出来。获取午夜时间并不难,请查看 Java 的 Calendar API。

标签: android kotlin google-api google-fit-api


【解决方案1】:

嗯....显然我在 AVD 上测试代码,而 Google FIT 没有安装在 AVD 中。即使有人在 AVD 中安装了 google fit,也不会显示步数数据(我知道它不会被计算在内,但我预计它会跨设备同步)。我将该应用程序与 Google FIT 一起安装在物理设备上,并且可以正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多