2017-05-04 89 views
0

获得睡眠数据我想从谷歌飞度下午7点(开始时间)获得睡眠数据前一天的时至11时(结束时间)。 使用以下代码我会在午夜后获取数据。 例如,如果Google fit的睡眠时间为晚上10点,早晨6点醒来,我从早上12点到上午6点就能看到它。所以我没有在午夜前得到睡眠数据。 请告诉我什么时候应该设置为开始时间。这是我的AsyncTask:如何从谷歌飞度

private class InsertAndVerifyDataTask extends AsyncTask<Void, Void, Void> { 

    @Override 
    protected void onPreExecute() { 
     fitSleepTime = 0; 
     fitSleepStartTime = 0; 
     fitWakeupTime = 0; 
     super.onPreExecute(); 
    } 

    protected Void doInBackground(Void... params) { 

     Date now = new Date(); 
     long endTime, startTime; 
     int hrOfDay; 

     Calendar cal = Calendar.getInstance(); 
     cal.setTime(now); 
     hrOfDay = cal.get(Calendar.HOUR_OF_DAY); 
     cal.set(Calendar.HOUR_OF_DAY, 19); 
     cal.set(Calendar.MINUTE, 0); 
     cal.set(Calendar.SECOND, 0); 
     if (hrOfDay < 12) 
      cal.add(Calendar.DAY_OF_YEAR, -1); 
     startTime = cal.getTimeInMillis(); 
     sleepDayTime = MyApplication.sdf.format(cal.getTime()); 

     // cal.setTime(now); 
     cal.set(Calendar.HOUR_OF_DAY, 23); 
     cal.set(Calendar.MINUTE, 59); 
     cal.set(Calendar.SECOND, 59); 

     endTime = cal.getTimeInMillis(); 

     // Begin by creating the query. 
     DataReadRequest readRequest = queryFitnessData(startTime, endTime); 
     DataReadResult dataReadResult = Fitness.HistoryApi.readData(
       mClient, readRequest).await(1, TimeUnit.MINUTES); 
     printData(dataReadResult); 

     if (hrOfDay < 12) { 
      Calendar cal1 = Calendar.getInstance(); 
      cal1.setTime(now); 
      cal1.set(Calendar.HOUR_OF_DAY, 0); 
      cal1.set(Calendar.MINUTE, 0); 
      cal1.set(Calendar.SECOND, 0); 
      startTime = cal1.getTimeInMillis(); 

      cal1.set(Calendar.HOUR_OF_DAY, 11); 
      cal1.set(Calendar.MINUTE, 59); 
      cal1.set(Calendar.SECOND, 59); 

      endTime = cal1.getTimeInMillis(); 

      // Begin by creating the query. 
      DataReadRequest readRequest1 = queryFitnessData(startTime, endTime); 
      DataReadResult dataReadResult1 = Fitness.HistoryApi.readData(
        mClient, readRequest1).await(1, TimeUnit.MINUTES); 
      printData(dataReadResult1); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     if (DashBoardSleepFragment.this.getView() != null) { 
      getLastNightSleepData(); 
      setSleepData(); 
     } 
     super.onPostExecute(result); 
    } 
} 
+1

尝试检查,如果你有正确的[记录健身数据](https://developers.google.com/fit/android/record)进行睡眠活动。这里是关于Google Fit API睡眠插入和读取会话中的DataPoint的[相关SO帖子](http://stackoverflow.com/a/42188679/5995040)。希望这可以帮助。 –

+0

你解决了这个问题吗?我面临同样的事情。希望你能发布解决方案。 – Klaus

+0

@Klaus我发布了我的答案;希望它也适用于您! – Shruti

回答

0

我只是改变开始时间结束时间,现在是工作的罚款 这里是我的doInBackground

protected Void doInBackground(Void... params) { 

     Date now = new Date(); 
     long endTime, startTime; 
     int hrOfDay; 

     Calendar cal = Calendar.getInstance(); 
     cal.setTime(now); 
     hrOfDay = cal.get(Calendar.HOUR_OF_DAY); 
     Log.e("hrOfDay", hrOfDay + ""); 
     cal.set(Calendar.HOUR_OF_DAY, 19); //19 is my start time. 
     cal.set(Calendar.MINUTE, 0); 
     cal.set(Calendar.SECOND, 0); 
     cal.add(Calendar.DAY_OF_YEAR, -1); 
     startTime = cal.getTimeInMillis(); 

     Calendar cal1 = Calendar.getInstance(); 
     cal1.setTime(now); 
     cal1.set(Calendar.HOUR_OF_DAY, 11); //11 is my end time. 
     cal1.set(Calendar.MINUTE, 0); 
     cal1.set(Calendar.SECOND, 0); 
     endTime = cal1.getTimeInMillis(); 

     // Begin by creating the query. 
     DataReadRequest readRequest1 = queryFitnessData(startTime, endTime); 
     DataReadResult dataReadResult1 = Fitness.HistoryApi.readData(
       mClient, readRequest1).await(1, TimeUnit.MINUTES); 
     printData(dataReadResult1); 
     return null; 
    }