我正在尝试使用BasicHistory Sample来存储数据,然后读取它但在我的情况下代码卡在插入call.await调用时不会返回我尝试过使用异步方式的任何内容,这里是代码< / p>
com.google.android.gms.common.api.Status insertStatus =
Fitness.HistoryApi.insert(mClient, insertRequest).await(1, TimeUnit.MINUTES);
答案 0 :(得分:1)
您是否请求了正确的权限?
根据Google Fit样本,它只需要“活动”权限。如果您将该示例中使用的数据类型更改为其他不同,请确保您设置了正确的权限。有关详情,请参阅Google Fit Doc中的授权部分。
您可以添加多个权限,只需向客户端添加新范围:
// Create the Google API Client
mClient = new GoogleApiClient.Builder(this)
.addApi(Fitness.API)
.addScope(new Scope(Scopes.FITNESS_ACTIVITY_READ_WRITE))
.addScope(new Scope(Scopes.FITNESS_BODY_READ_WRITE))
.addScope(new Scope(Scopes.FITNESS_LOCATION_READ_WRITE))
...
答案 1 :(得分:0)
要将数据类型插入到google fit中,您必须创建一个相同类型的DataSet,并确保使用适当的范围构建GoogleApiClient,就像上面提到的jose一样。以下是在google fit中插入高度的示例
public boolean saveUserHeight(int heightCentimiters) {
// to post data
float height = ((float) heightCentimiters) / 100.0f;
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 heightDataSet = createDataForRequest(DataType.TYPE_HEIGHT, // for
DataSource.TYPE_RAW, height, // weight in kgs
startTime, // start time
endTime, // end time
TimeUnit.MILLISECONDS // Time Unit, for example,
// TimeUnit.MILLISECONDS
);
com.google.android.gms.common.api.Status heightInsertStatus = Fitness.HistoryApi
.insertData(fitnessClient, heightDataSet).await(1,
TimeUnit.MINUTES);
if (heightInsertStatus.isSuccess()) {
//Log.e("Height", heightCentimiters+"Inserted");
} else {
//Log.e("Height", "inserted failed");
}
return heightInsertStatus.isSuccess();
}