由于您没有具体说明要跟踪卡路里的内容,因此我提供了两种方法。第一种是在 RecordingAPI 的帮助下跟踪卡路里,第二种是从 Fit Store 获取卡路里消耗。
要获取当前燃烧的卡路里,您必须订阅 RecordingAPI 的卡路里:
Fitness.RecordingApi.subscribe(mClient, DataType.TYPE_CALORIES_EXPENDED)
.setResultCallback(new ResultCallback<Status>() {
@Override
public void onResult(Status status) {
if (status.isSuccess()) {
if (status.getStatusCode()
== FitnessStatusCodes.SUCCESS_ALREADY_SUBSCRIBED) {
disRec=true;
new SharedPrefManager(MainActivityWithSpinner.this).setTracking(true);
} else {
new SharedPrefManager(MainActivityWithSpinner.this).setTracking(true);
disRec=true;
Toast.makeText(MainActivityWithSpinner.this,"Recording started for Calories",Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(MainActivityWithSpinner.this,"Distance Recording faced some issues.Try again.",Toast.LENGTH_SHORT).show();
}
}
});
那么您可以通过以下方法获得它:
public String getCalories(long startTime,long endTime){
String steps="";
DataReadRequest readRequest = new DataReadRequest.Builder()
.aggregate(DataType.TYPE_CALORIES_EXPENDED, DataType.AGGREGATE_CALORIES_EXPENDED)
.bucketByTime(1, TimeUnit.DAYS)
.setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
.build();
DataReadResult dataReadResult =
Fitness.HistoryApi.readData(MainActivityWithSpinner.mClient, readRequest).await(1, TimeUnit.MINUTES);
if(dataReadResult.getBuckets().size() > 0){
for (Bucket bucket : dataReadResult.getBuckets()) {
List<DataSet> dataSets = bucket.getDataSets();
for (DataSet dataSet1 : dataSets) {
for(DataPoint dataPoint:dataSet1.getDataPoints()){
for (Field field:dataPoint.getDataType().getFields()){
steps=String.format("%.2f",Float.parseFloat(dataPoint.getValue(field)+""))+"";
}
}
}
}
}
return steps;
}
要从 Google Fit Store 获取数据,您可以使用以下方法:
public class InsertAndVerifyDataTask extends AsyncTask<Void, Void, Void> {
String result="";
long total;
boolean datainsertionFailed=false;
@Override
protected void onPreExecute() {
super.onPreExecute();
avLoadingIndicatorView.show();
}
protected Void doInBackground(Void... params) {
DataReadRequest readRequest = queryFitnessData();
DataReadResult dataReadResult =
Fitness.HistoryApi.readData(MainActivityWithSpinner.mClient, readRequest).await(1, TimeUnit.MINUTES);
PendingResult<DailyTotalResult> result =
Fitness.HistoryApi.readDailyTotalFromLocalDevice(MainActivityWithSpinner.mClient, TYPE_CALORIES_EXPENDED);
DailyTotalResult totalResult = result.await(30, SECONDS);
if (totalResult.getStatus().isSuccess()) {
DataSet totalSet = totalResult.getTotal();
total = totalSet.isEmpty()
? 0
: (long)totalSet.getDataPoints().get(0).getValue(FIELD_CALORIES).asFloat();
} else {
// handle failure
}
DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");
DateFormat dateFormatFull = new SimpleDateFormat("dd/MM/yy");
DateFormat dateFormatTemp=new SimpleDateFormat("E");
datax.clear();
if(dataReadResult.getBuckets().size() > 0){
for (Bucket bucket : dataReadResult.getBuckets()) {
List<DataSet> dataSets = bucket.getDataSets();
for (DataSet dataSet1 : dataSets) {
for(DataPoint dataPoint:dataSet1.getDataPoints()){
for (Field field:dataPoint.getDataType().getFields()){
String dayOfWeek=dateFormatTemp.format(new Date(dataPoint.getStartTime(TimeUnit.MILLISECONDS)));
Calendar cal=Calendar.getInstance();
cal.setTime(new Date(dataPoint.getStartTime(TimeUnit.MILLISECONDS)));
int day=cal.get(Calendar.DAY_OF_MONTH);
String month=getMonth(cal.get(Calendar.MONTH));
String fullDate=dayOfWeek+", "+day+" "+month;
StepCountModel stepCountModel=new StepCountModel(String.format("%.2f",Float.parseFloat(dataPoint.getValue(field)+""))+"",fullDate,dateFormat.format(new Date(dataPoint.getStartTime(TimeUnit.MILLISECONDS))),dateFormat.format(new Date(dataPoint.getEndTime(TimeUnit.MILLISECONDS))));
datax.add(stepCountModel);
//result+="Field: "+field.getName()+"Value: "+dataPoint.getValue(field)+"Start: "+dateFormat.format(dataPoint.getStartTime(TimeUnit.MILLISECONDS))+"End: "+dateFormat.format(dataPoint.getEndTime(TimeUnit.MILLISECONDS))+"\n";
}
}
}
}
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
todayCount.setText("Total Calories expended today: "+total+" cal");
customAdapter.notifyDataSetChanged();
avLoadingIndicatorView.hide();
}
}
/**
* Return a {@link DataReadRequest} for all step count changes in the past week.
*/
public static DataReadRequest queryFitnessData() {
DateTimeZone timeZone = DateTimeZone.forID("Asia/Kolkata");
DateTime today = new DateTime(timeZone).withTime(23,59,59,900);
DateTime startDay = today.minusWeeks(1).withTimeAtStartOfDay();
long endTime = today.getMillis();
long startTime=startDay.getMillis();
java.text.DateFormat dateFormat = getDateInstance();
DataSource ESTIMATED_CALORIES_DELTAS = new DataSource.Builder()
.setDataType(DataType.TYPE_CALORIES_EXPENDED)
.setType(DataSource.TYPE_RAW)
.setStreamName("estimated_calories")
.build();
DataReadRequest readRequest = new DataReadRequest.Builder()
.aggregate(DataType.TYPE_CALORIES_EXPENDED,DataType.AGGREGATE_CALORIES_EXPENDED)
.bucketByTime(1, TimeUnit.DAYS)
.setTimeRange(startTime, endTime, TimeUnit.MILLISECONDS)
.build();
// [END build_read_data_request]
return readRequest;
}