如何从Google Fit REST API获取Total Sleep

时间:2017-03-01 14:29:35

标签: java rest google-fit

我使用java

尝试了这个
   String AccessToken = "TOKEN";
   String ApiUrl =     "https://www.googleapis.com/fitness/v1/users/me/sessions?startTime=2017-02-28T22:00:00.00Z&endTime=2017-03-01T10:59:59.99Z";
   HttpClient httpclient = HttpClientBuilder.create().build();
   try {
        HttpGet httpPost = new HttpGet(ApiUrl);
        httpPost.addHeader("Authorization", "Bearer " + AccessToken);
        HttpResponse response = httpclient.execute(httpPost);
  `enter code here`      System.out.println("\nSending 'GET' request to URL : " + ApiUrl);
        HttpEntity entity = response.getEntity();
        BufferedReader rd = new BufferedReader(
                new InputStreamReader(entity.getContent()));
        String line;
        while ((line = rd.readLine()) != null) {
            System.out.println("line" + line);
        }
    } catch (Exception e) {
        System.out.println("Exception at getDataFromUrl ,error is " + e.getMessage());
    }

我得到了回应

  

{
 "session": [
  {
   "id": "Deep sleep141488319560000",
   "name": "Deep sleep14",
   "startTimeMillis": "1488319560000",
   "endTimeMillis": "1488320700000",
   "modifiedTimeMillis": "1488374094270",
   "application": {
    "packageName": "com.xiaomi.hm.health"
   },
   "activityType": 72
  },
  {
   "id": "Deep sleep161488321420000",
   "name": "Deep sleep16",
   "startTimeMillis": "1488321420000",
   "endTimeMillis": "1488322500000",
   "modifiedTimeMillis": "1488374094280",
   "application": {
    "packageName": "com.xiaomi.hm.health"
   },
   "activityType": 72
  },
  {
   "id": "Deep sleep201488328680000",
   "name": "Deep sleep20",
   "startTimeMillis": "1488328680000",
   "endTimeMillis": "1488330360000",
   "modifiedTimeMillis": "1488374094303",
   "application": {
    "packageName": "com.xiaomi.hm.health"
   },
   "activityType": 72
  },
  {
   "id": "Light sleep131488318900000",
   "name": "Light sleep13",
   "startTimeMillis": "1488318900000",
   "endTimeMillis": "1488319560000",
   "modifiedTimeMillis": "1488374094265",
   "application": {
    "packageName": "com.xiaomi.hm.health"
   },
   "activityType": 72
  }]}

但是我想要完全睡眠例如7小时10分钟

我正在使用的API是正确的还是我错过了什么。

任何帮助表示赞赏。我是Google健身新手。

注意:这是java而不是Android。

1 个答案:

答案 0 :(得分:1)

您必须通过计算“ endTimeMillis”和“ startTimeMillis”之间的差来自行计算睡眠时间,并在所需范围内对这些计算值求和。这很简单,但也很棘手,因为存储的数据可能与源(将数据发送到Google Fit的应用)不同。

我也遇到了这个问题,但没有找到令人满意的解决方案,但仍可以正常工作。由于睡眠数据不是“真实”数据类型(请参见https://developers.google.com/fit/rest/v1/data-types#public_data_types),因此您无法确定应用是否在相同的请求范围内发送重复的值。在我的情况下,应用程序“ xiaomi mi-fit”使用相同的“ startTimeMillis”和“ endTimeMillis”发送重复值,因此您必须在代码中进行检查。否则,您将获得不正确的睡眠时间。

只要Google不支持将睡眠数据作为官方数据类型,您就不能确定数据是否正确。此外:当不同的应用程序将其睡眠数据发送到相同的Google Fit帐户时,这些数据将不会汇总,您将不得不通过过滤发送数据包的名称(应用程序)自行对数据进行排序。

此外,Google还删除了自己的本地应用程序(版本2.x)和WebView(https://fit.google.com)中的睡眠数据!