Android 使用Google fit Recording_API获取消耗的活动卡路里
我正在开发健身应用程序,我需要使用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
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。谢谢你的回复