如何从 Google Fit 获取睡眠数据
How to get Sleep data from Google Fit
我想获取前一天从 Google Fit 晚上 7 点(开始时间)到上午 11 点(时间结束)。
使用以下代码,我在午夜后获取数据。
例如,如果 Google fit 的睡眠时间为晚上 10 点,起床时间为早上 6 点;我在凌晨 12 点到早上 6 点收到它。所以我不会在午夜之前获得睡眠数据。
请告诉我应该将什么时间设置为开始时间。这是我的异步任务:
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);
}
}
我刚刚更改了 startTime 和 endTime,现在可以正常工作了
这是我的 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;
}
我想获取前一天从 Google Fit 晚上 7 点(开始时间)到上午 11 点(时间结束)。 使用以下代码,我在午夜后获取数据。 例如,如果 Google fit 的睡眠时间为晚上 10 点,起床时间为早上 6 点;我在凌晨 12 点到早上 6 点收到它。所以我不会在午夜之前获得睡眠数据。 请告诉我应该将什么时间设置为开始时间。这是我的异步任务:
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);
}
}
我刚刚更改了 startTime 和 endTime,现在可以正常工作了
这是我的 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;
}