Android 使用Google fit Recording_API获取消耗的活动卡路里

Android 使用Google fit Recording_API获取消耗的活动卡路里,android,google-fit,Android,Google Fit,我正在开发健身应用程序,我需要使用Recording_API获取一些信息,以跟踪步数、燃烧的卡路里和覆盖的距离。我能够成功地计算步数,但无法获得活动卡路里和距离。下面我将代码放在燃烧卡路里上 googleApiClient = new GoogleApiClient.Builder(this) .addApi(Fitness.HISTORY_API) .addApi(Fitness.RECORDING_API) .addAp

我正在开发健身应用程序,我需要使用Recording_API获取一些信息,以跟踪步数、燃烧的卡路里和覆盖的距离。我能够成功地计算步数,但无法获得活动卡路里和距离。下面我将代码放在燃烧卡路里上

googleApiClient = new GoogleApiClient.Builder(this)
            .addApi(Fitness.HISTORY_API)
            .addApi(Fitness.RECORDING_API)
            .addApi(Fitness.CONFIG_API)
            .addScope(new Scope(Scopes.FITNESS_ACTIVITY_READ))
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .enableAutoManage(this, 0, this)
            .build();

Fitness.RecordingApi.subscribe(googleApiClient, DataType.TYPE_CALORIES_EXPENDED)
            .setResultCallback(new ResultCallback<Status>() {
                @Override
                public void onResult(Status status) {
                    if (status.isSuccess()) {
                        if (status.getStatusCode() == FitnessStatusCodes.SUCCESS_ALREADY_SUBSCRIBED) {
                            Log.e( "RecordingAPI", "Already subscribed to the Recording API");
                        } else {
                            Log.e("RecordingAPI", "Subscribed to get Calories using Recording API");
                        }
                    }
                }
            });



new DataReadRequest.Builder()
            .aggregate(DataType.TYPE_CALORIES_EXPENDED, DataType.AGGREGATE_CALORIES_EXPENDED)
            .bucketByActivitySegment(1, TimeUnit.MILLISECONDS)
            .setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
            .build();



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

if (dataReadResult.getBuckets().size() > 0) {
        for (Bucket bucket : dataReadResult.getBuckets()) {
            String bucketActivity = bucket.getActivity();
            if (bucketActivity.contains(FitnessActivities.WALKING)) {
                List<DataSet> dataSets = bucket.getDataSets();
                for (DataSet dataSet : dataSets) {
                    dumpDataSet(dataSet);
                }
            }
        }
 }



for (DataPoint dp : dataSet.getDataPoints()) {
        if (dp.getEndTime(TimeUnit.MILLISECONDS) > dp.getStartTime(TimeUnit.MILLISECONDS)) {
            for (Field field : dp.getDataType().getFields()) {
                expendedCalories = expendedCalories + dp.getValue(field).asFloat();
            }
        }
 }
googleApiClient=new googleApiClient.Builder(此)
.addApi(健身历史\ U API)
.addApi(适用性记录\u API)
.addApi(Fitness.CONFIG_API)
.addScope(新范围(范围.适应度\活动\读取))
.addConnectionCallbacks(此)
.addOnConnectionFailedListener(此)
.enableAutoManage(this,0,this)
.build();
Fitness.RecordingApi.subscribe(GoogleAppClient,数据类型。类型\u卡路里\u消耗)
.setResultCallback(新的ResultCallback(){
@凌驾
公共void onResult(状态){
if(status.issucess()){
if(status.getStatusCode()==FitnessStatusCodes.SUCCESS\u已订阅){
Log.e(“RecordingAPI”,“已订阅录制API”);
}否则{
Log.e(“RecordingAPI”,“订阅使用录制API获取卡路里”);
}
}
}
});
新建DataReadRequest.Builder()
.aggregate(DataType.TYPE\u卡路里消耗,DataType.aggregate\u卡路里消耗)
.bucketByActivitySegment(1,时间单位为毫秒)
.setTimeRange(开始时间、结束时间、时间单位.毫秒)
.build();
Fitness.HistoryApi.readData(mClient,readRequest).wait(1,TimeUnit.MINUTES);
如果(dataReadResult.GetBucket().size()>0){
for(Bucket:dataReadResult.getbucket()){
字符串bucketActivity=bucket.getActivity();
if(bucketActivity.contains(FitnessActivities.WALKING)){
List dataSets=bucket.getDataSets();
用于(数据集:数据集){
数据集(dataSet);
}
}
}
}
对于(DataPoint dp:dataSet.getDataPoints()){
if(dp.getEndTime(TimeUnit.millides)>dp.getStartTime(TimeUnit.millides)){
for(字段:dp.getDataType().getFields()){
ExpendedCarries=ExpendedCarries+dp.getValue(field).asFloat();
}
}
}
在上面的代码中,bucket活动是未知的,数据点是空的,因此我无法获取卡路里。以前我使用的是HISTORY_API,使用它我可以正确地获取所有信息,但它只在用户拥有google fit帐户时才起作用,否则它会给出空结果。 谁能帮我一下吗。

你说:

只有当用户拥有GoogleFit帐户时,它才会工作,否则它会给出空结果。谁能帮我一下吗

根据这一点,使用FitAPI确实需要有Google帐户

步骤1:获得一个谷歌帐户

要使用Google Fit API,您需要一个Google帐户。如果你已经 有了账户,你就万事大吉了。您可能还想创建一个 单独的谷歌账户用于测试目的


它将工作,你只需要谷歌帐户,而不是谷歌健身帐户。顺便说一句,现在我可以得到的活动卡路里燃烧使用录制的API。谢谢你的回复