【发布时间】:2019-12-03 08:48:38
【问题描述】:
我目前正在开发一款可以从 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