2017-05-04 38 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; 
    }