从Google Fit Android API检索最近的行走
目前,我正在尝试开发一个本地Android应用程序,从History_API检索信息。我已经能够恢复卡路里,每天的步伐和活动时间。现在,我正在考虑将其提升到下一个级别,并尝试使用以下代码查看从历史api检索到的不同类型的活动:从Google Fit Android API检索最近的行走,android,google-fit,Android,Google Fit,目前,我正在尝试开发一个本地Android应用程序,从History_API检索信息。我已经能够恢复卡路里,每天的步伐和活动时间。现在,我正在考虑将其提升到下一个级别,并尝试使用以下代码查看从历史api检索到的不同类型的活动: protected Void doInBackground(Void... params) { DataReadRequest readRequest = queryFitnessData(); DataReadResult da
protected Void doInBackground(Void... params) {
DataReadRequest readRequest = queryFitnessData();
DataReadResult dataReadResult =
Fitness.HistoryApi.readData(mGoogleApiClient, readRequest).await(1, TimeUnit.MINUTES);
getData(dataReadResult);
return null;
}
这是定义请求的函数:
private DataReadRequest queryFitnessData() {
Calendar cal = Calendar.getInstance();
Date now = new Date();
cal.setTime(now);
long endTime = cal.getTimeInMillis();
cal.add(Calendar.WEEK_OF_MONTH, -1);
long startTime = cal.getTimeInMillis();
DataSource ACTIVITY_SEGMENT = new DataSource.Builder()
.setDataType(DataType.TYPE_ACTIVITY_SEGMENT)
.setType(DataSource.TYPE_DERIVED)
.build();
DataReadRequest readRequest = new DataReadRequest.Builder()
.aggregate(ACTIVITY_SEGMENT, DataType.AGGREGATE_ACTIVITY_SUMMARY)
.bucketByTime(5, TimeUnit.MINUTES)
.setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
.build();
return readRequest;
}
下午的时候,这看起来效果不错,但是当我们进一步研究它的时候,它不再显示视图了。查看日志文件显示,存储桶返回了“in_vehicle”类型的所有位置。这就解释了为什么下面的代码没有将视图添加到我的数组中
private void getData(DataReadResult result) {
if (result.getBuckets().size() > 0) {
Log.i(TAG, "Bucket size: " + result.getBuckets().size());
for(Bucket bucket : result.getBuckets()) {
long activeTime = bucket.getEndTime(TimeUnit.MINUTES) - bucket.getStartTime(TimeUnit.MINUTES);
Log.i(TAG, bucket.getActivity());
switch (bucket.getActivity()) {
case "walking":
Log.i(TAG, "Adding a walking card");
activityData.add(new CustomActivityCard("Walking","Place, 27 juli",Long.toString(activeTime) + " minutes","5 kilometers","2340 steps","1340 calories"));
break;
case "running":
Log.i(TAG, "Adding a running card");
activityData.add(new CustomActivityCard("Running","Place, 27 juli",Long.toString(activeTime) + " minutes","5 kilometers","2340 steps","1340 calories"));
break;
case "biking":
Log.i(TAG, "Adding a cycling card");
activityData.add(new CustomActivityCard("Cycling","Place, 27 juli",Long.toString(activeTime) + " minutes","5 kilometers","2340 steps","1340 calories"));
break;
}
}
}
}
我不明白为什么代码今天下午显示步行和跑步活动,突然只返回我开车时的活动。我能想到的一个可能的解决方案是,我的应用程序没有订阅任何数据类型。因此,我的问题是:
我还不确定评论中建议的订阅是否有任何不同,但有一件事确实有助于达成解决方案,那就是更改下面的代码段:
DataReadRequest readRequest = new DataReadRequest.Builder()
.aggregate(ACTIVITY_SEGMENT, DataType.AGGREGATE_ACTIVITY_SUMMARY)
.bucketByTime(5, TimeUnit.MINUTES)
.setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
.build();
对于下面的DataRequest之类的东西,这使我能够检索当天的步行活动
DataReadRequest readRequest = new DataReadRequest.Builder()
.aggregate(DataType.TYPE_ACTIVITY_SEGMENT, DataType.AGGREGATE_ACTIVITY_SUMMARY)
.bucketByActivitySegment(7, TimeUnit.MINUTES)
.setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
.build();
希望这也能帮助其他人 根据这一点,您需要记录并从健身历史中读取每种健身数据类型。然后,要检索活动,您需要创建一个实例。有一个示例代码用于实现指南。希望这有帮助。如果我错了,请纠正我的错误,但因为我之前能够检索活动,但实际上仍然是(这只是检索“in_vehicle”健身数据类型。这不应该是问题吗?以防我在订阅中生成,结果保持不变。