Google通过此代码插入DataType.TYPE_STEP_COUNT_DELTA
。但如何使用Android
TYPE_HEIGHT AND TYPE_WEIGHT
com.google.android.gms.common.api.Status insertStatus =
Fitness.HistoryApi.insertData(mClient, dataSet)
.await(1, TimeUnit.MINUTES);
答案 0 :(得分:5)
要插入数据,您需要为高度和重量创建一个新的DataSet对象。
我已经创建了一个方法,以便为请求获取具有必要参数的DataSet对象。
/**
* This method creates a dataset object to be able to insert data in google fit
* @param dataType DataType Fitness Data Type object
* @param dataSourceType int Data Source Id. For example, DataSource.TYPE_RAW
* @param values Object Values for the fitness data. They must be int or float
* @param startTime long Time when the fitness activity started
* @param endTime long Time when the fitness activity finished
* @param timeUnit TimeUnit Time unit in which period is expressed
* @return
*/
private DataSet createDataForRequest(DataType dataType, int dataSourceType, Object values,
long startTime, long endTime, TimeUnit timeUnit) {
DataSource dataSource = new DataSource.Builder()
.setAppPackageName(mAppId)
.setDataType(dataType)
.setType(dataSourceType)
.build();
DataSet dataSet = DataSet.create(dataSource);
DataPoint dataPoint = dataSet.createDataPoint().setTimeInterval(startTime, endTime, timeUnit);
if (values instanceof Integer) {
dataPoint = dataPoint.setIntValues((Integer)values);
} else {
dataPoint = dataPoint.setFloatValues((Float)values);
}
dataSet.add(dataPoint);
return dataSet;
}
然后,你需要做这样的事情:
DataSet weightDataSet = createDataForRequest(
DataType.TYPE_WEIGHT, // for height, it would be DataType.TYPE_HEIGHT
DataSource.TYPE_RAW,
value, // weight in kgs
startTime, // start time
endTime, // end time
timeUnit // Time Unit, for example, TimeUnit.MILLISECONDS
);
com.google.android.gms.common.api.Status weightInsertStatus =
Fitness.HistoryApi.insertData(mClient, weightDataSet )
.await(1, TimeUnit.MINUTES);
如果您阅读Google Fit doc,这将非常有帮助。在那里,您可以阅读有关data types
的更多信息我希望这有助于^^
答案 1 :(得分:0)
private DataSet createDataForRequest(DataType dataType
,float dataSourceType
,int values
,long startTime, long endTime, TimeUnit timeUnit) {
DataSource dataSource = new DataSource.Builder()
.setAppPackageName(this)
.setDataType(dataType)
.setType(DataSource.TYPE_RAW)
.build();
DataSet dataSet = DataSet.create(dataSource);
DataPoint dataPoint = dataSet.createDataPoint().setTimeInterval(startTime, endTime, timeUnit);
float weight = Float.parseFloat(""+values);
dataPoint = dataPoint.setFloatValues(weight);
dataSet.add(dataPoint);
return dataSet;
}
// to post data
Calendar cal = Calendar.getInstance();
Date now = new Date();
cal.setTime(now);
long endTime = cal.getTimeInMillis();
cal.add(Calendar.DAY_OF_YEAR, -1);
long startTime = cal.getTimeInMillis();
DataSet weightDataSet = createDataForRequest(
DataType.TYPE_WEIGHT, // for height, it would be DataType.TYPE_HEIGHT
DataSource.TYPE_RAW,
56, // weight in kgs
startTime, // start time
endTime, // end time
TimeUnit.MINUTES // Time Unit, for example, TimeUnit.MILLISECONDS
);
com.google.android.gms.common.api.Status weightInsertStatus =
Fitness.HistoryApi.insertData(mClient, weightDataSet )
.await(1, TimeUnit.MINUTES);
// Before querying the data, check to see if the insertion succeeded.
if (!weightInsertStatus.isSuccess()) {
Log.i(TAG, "There was a problem inserting the dataset.");
return null;
}
// At this point, the data has been inserted and can be read.
Log.i(TAG, "Data insert was successful!");
// I'm getting : There was a problem inserting the dataset.
答案 2 :(得分:0)
您可以使用以下方法在更新的GoogleFit API中插入体重和身高:
private void insertWeightHeight(Context context, DataType dataType, float value) {
long startTime = Calendar.getInstance().getTimeInMillis();
long endTime = startTime;
DataSource dataSource = new DataSource.Builder()
.setAppPackageName(getContext())
.setDataType(dataType)
.setType(DataSource.TYPE_RAW)
.build();
DataPoint dataPoint = DataPoint.builder(dataSource)
.setTimeInterval(startTime, endTime, TimeUnit.MILLISECONDS)
.setFloatValues(value)
.build();
DataSet dataSet = DataSet.builder(dataSource)
.add(dataPoint)
.build();
Fitness.getHistoryClient(context, GoogleSignIn.getLastSignedInAccount(context))
.insertData(dataSet)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
System.out.println("success");
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
System.out.println("failed");
}
});
}
您可以按以下方式调用此方法:
insertWeightHeight(getContext(), DataType.TYPE_WEIGHT, 70f);//weight in kg
insertWeightHeight(getContext(), DataType.TYPE_HEIGHT, 1.75f);//height in meter