【问题标题】:Google Fit API, getting calories burned per activityGoogle Fit API,获取每次活动消耗的卡路里
【发布时间】:2016-06-14 19:18:41
【问题描述】:

因此,我正在尝试创建一个连接到 Google Fit 的应用,并以一种非常简洁的方式向用户显示他们的数据,但我无法找到用户每天为每个单独活动燃烧的卡路里。我可以得到一整天的总卡路里,以及用户每天进行的每项活动,但不能得到每项活动消耗的卡路里。

GitHub 链接:https://github.com/drb56/FitTest 我只添加了 java 代码而不是任何 xml 东西。 Google Fit 代码位于 FitTestFragment.java 中。 我将在下面粘贴一些关键代码:

这里是我连接到 google fit API 客户端的地方:

mClient = new GoogleApiClient.Builder(getContext())
            .addApi(Fitness.HISTORY_API)
            .addScope(new Scope(Scopes.FITNESS_ACTIVITY_READ))
            .addConnectionCallbacks(this)
            .enableAutoManage(getActivity(), 0, new GoogleApiClient.OnConnectionFailedListener() {
            @Override
            public void onConnectionFailed(ConnectionResult result) {
                Log.i("MyApp", "Google Play services connection failed. Cause: " +
                        result.toString());
        }})
        .build();

这是我为特定信息发出 DataReadRequest 的地方:

DataReadRequest readRequest = new DataReadRequest.Builder()
                         .aggregate(DataType.TYPE_CALORIES_EXPENDED,     DataType.AGGREGATE_CALORIES_EXPENDED)
                        .aggregate(DataType.TYPE_ACTIVITY_SEGMENT, DataType.AGGREGATE_ACTIVITY_SUMMARY)
                        .bucketByTime(1, TimeUnit.DAYS)
                        .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
                        .build();

    DataReadResult dataReadResult = Fitness.HistoryApi.readData(mClient, readRequest).await(1, TimeUnit.MINUTES);


    if (dataReadResult.getBuckets().size() > 0)
    {
        Log.i("MyApp", "Number of returned buckets of DataSets is: "
                + dataReadResult.getBuckets().size());
        for (Bucket bucket : dataReadResult.getBuckets())
        {
            List<DataSet> dataSets = bucket.getDataSets();
                     for (DataSet dataSet : dataSets)
                    {
                        dumpDataSet(dataSet);
                    }
                }
             }
            else
            {
                Log.i("MyApp", "No data");
            }

这是我的一些活动和消耗的卡路里的输出:

Data point:
    Type: com.google.calories.expended
    Date: 06/09/2016
    Start: 2:58:13 PM
    End: 2:58:13 PM
    Field: calories Value: 2555.9749
Data point:
    Type: com.google.activity.summary
    Date: 06/09/2016
    Start: 2:58:13 PM
    End: 2:58:13 PM
    Field: activity Value: 3
    Field: duration Value: 76513626
    Field: num_segments Value: 17
Data point:
    Type: com.google.activity.summary
    Date: 06/09/2016
    Start: 4:13:58 PM
    End: 12:41:04 PM
    Field: activity Value: 7
    Field: duration Value: 4553146
    Field: num_segments Value: 17

【问题讨论】:

    标签: java android google-fit google-fit-sdk


    【解决方案1】:

    您可以使用以下代码获取每天各种活动的卡路里

    DataReadRequest readRequest = new DataReadRequest.Builder()
                .aggregate(DataType.TYPE_CALORIES_EXPENDED, DataType.AGGREGATE_CALORIES_EXPENDED)
                .bucketByActivityType(1, TimeUnit.SECONDS)
                .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
                .build();
    

    您可以循环运行此代码以获取任意天数的数据。它将返回所有活动的数据桶,您可以通过此方法从桶中获取活动名称,该方法将活动名称作为字符串返回

    bucket.getActivity();
    

    将其存储在自定义集合中,您就可以开始使用了。希望能帮助到你! :)

    【讨论】:

      【解决方案2】:

      您需要使用 Fitness.SESSIONS_API,而不是 Fitness.HISTORY_API。 Sessions 表示用户进行健身活动的时间间隔。

      【讨论】:

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