从Google Fit API读取准确的睡眠数据

问题描述 投票:1回答:1

我目前正在开发一个将从Google Fit获取健身历史数据的应用。确定步数和体重是可以的,但是获取睡眠数据有点问题。我想获得准确的开始时间和结束时间,但唯一的方法是按活动细分进行分类。问题是,当您要获取大量数据时(我当前正在开发的应用程序最多需要从365天之前获取数据),它甚至不会返回超时错误,并且我的应用程序会一直保持加载中。它甚至不会开始从Google Fit中读取数据。因此,我想问一下,尽管活动量很大,是否有办法按活动段获取睡眠数据?并且请共享您的代码。顺便说一下,这就是我获取睡眠数据的方式:

val sleepReadRequest = DataReadRequest.Builder().aggregate(DataType.TYPE_ACTIVITY_SEGMENT,DataType.AGGREGATE_ACTIVITY_SUMMARY).bucketByActivitySegment(1,TimeUnit.MINUTES).setTimeRange(offset,end,TimeUnit.MILLISECONDS).build()

    LogUtil.d(TAG, "getting sleep data...")

    Fitness.getHistoryClient(
        context,
        Objects.requireNonNull<GoogleSignInAccount>(GoogleSignIn.getLastSignedInAccount(context))
    )
        .readData(sleepReadRequest)
        .addOnSuccessListener { dataReadResponse ->
            LogUtil.d(TAG, "success sleep data")
            val secondSet = handleDataReturned(dataReadResponse, false, DateUtil.convertTimeStampToDate(offset, DateUtil.DATE_FORMAT))
            dailyData.addAll(secondSet)
            val allDailyList = getDailyDataList(dailyData, userHeight)
            callback.onGetDataSuccess(allDailyList)
        }
        .addOnFailureListener { e ->
            LogUtil.d(TAG, "fail sleep data")
            if (e is ApiException && e.statusCode == GoogleFitError.NOT_SIGNED.code) { // not signed app exception
                revokePermission(context)
                callback.onGetDataFailure(GoogleFitError.parse(e.statusCode))
            } else {
                callback.onGetDataFailure(AppError.parse(Throwable(e)))
            }
        }
        .addOnCompleteListener { task ->
            LogUtil.d(TAG, "complete sleep data")
            callback.onGetDataComplete(task)
        }
android api kotlin google-fit google-fit-sdk
1个回答
0
投票

而不是汇总,您能只阅读活动段并自己遍历它们吗?

val sleepReadRequest =
    DataReadRequest.Builder()
        .read(DataType.TYPE_ACTIVITY_SEGMENT)
        .setTimeRange(offset, end, TimeUnit.MILLISECONDS)
        .build()

然后您可以使用DataReadResult#getDataSet(DataType)检索返回的数据。

[如果您发现它超时了(一次可能会大量存储一年的数据!),我建议将请求批量处理成较小的请求,并在过去将数据缓存,这种情况不太可能改变。

© www.soinside.com 2019 - 2024. All rights reserved.