Google Fit示例无效

时间:2014-10-15 19:08:03

标签: android google-play-services google-fit

我正在尝试使用BasicHistory Sample来存储数据,然后读取它但在我的情况下代码卡在插入call.await调用时不会返回我尝试过使用异步方式的任何内容,这里是代码< / p>

com.google.android.gms.common.api.Status insertStatus =
Fitness.HistoryApi.insert(mClient, insertRequest).await(1, TimeUnit.MINUTES);

2 个答案:

答案 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();
}