Google Fit API,每活动消耗卡路里

问题描述:

因此,我试图创建一个连接到Google Fit的应用程序,并以一种非常简化的方式向用户显示其数据,但我很难找到用户每天为每个单独活动消耗的卡路里.我可以获取一整天的总卡路里以及用户每天进行的每项活动的热量,但不能获得每项活动消耗的卡路里.

So I'm trying to create an app that connects to Google Fit and shows the user their data in a pretty streamlined way and I'm having trouble finding the calories the user burned for each individual activity per day. I can get the total calories for the entire day, and each activity the user did each day, but not the calories burned for each activity.

链接到GitHub: https://github.com/drb56/FitTest 我只添加了Java代码,没有添加任何xml内容. Google Fit代码位于FitTestFragment.java中. 我将一些关键代码粘贴到下面:

Link to GitHub: https://github.com/drb56/FitTest I've only added the java code not any of the xml stuff. And the Google Fit code is in the FitTestFragment.java. I'll paste some key code down below:

在这里我连接到Google Fit API客户端:

Here's where I connect to the google fit API client:

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发送特定信息:

Here's where I make the DataReadRequest for specific information:

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");
            }

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

Here's what my output looks like for some activities and calories expended:

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

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

You can get calories for various activities for each day by using the following code

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

您可以循环运行此代码以获取所需的任意天的数据.它将返回所有活动的数据存储桶,您可以通过此方法将活动名称返回为String

You can run this code in a loop to get data for as many days as you want. It will return data buckets for all activities and you can fetch activity name from the bucket by this method that returns activity name as String

bucket.getActivity();

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

Store it in a custom Collection and you are good to go. Hope it helps! :)