2017-05-04 9 views
0

から睡眠データを取得するために、どのように私は午前11時(終了時間)に午後7時間グーグルフィット(開始時刻)から睡眠データ前日のを取得したいです。 次のコードを使用して、深夜のデータを取得します。 たとえば、Googleのフィット感が睡眠時間が午後10時で、起床時間が午前6時であれば、私は午前12時から午前6時にそれを取得します。だから私は真夜中前に睡眠データを取得しません。 開始時間を何時に設定するか教えてください。ここに私のAsyncTaskは次のとおりです。は、Googleのフィット

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 Sleepの[関連するSOの投稿](http://stackoverflow.com/a/42188679/5995040)に、SessionのDataPointを挿入して読み込みます。お役に立てれば。 –

+0

この問題を解決しましたか?私は同じことに直面している。あなたが解決策を投稿できるかどうか分かります。 – Klaus

+0

@Klaus私は自分の答えを投稿しました;それもあなたのために働くことを願っています! – Shruti

答えて

0

私はちょうどのstartTimeendTimeのを変更し、今ではここで罰金 を働いている私の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; 
    } 
関連する問題