La suspensión se representa mediante sesiones del tipo sleep
.
De manera opcional, las sesiones pueden contener etapas de sueño, que tienen detalles más detallados sobre los datos de sueño. Por ejemplo, si fue la suspensión ligera, profunda o REM:
Valores de la etapa de sueño
Tipo de etapa del sueño | Valor |
---|---|
Despierto (durante el ciclo de sueño) | 1 |
Sueño | 2 |
Fuera de la cama | 3 |
Sueño ligero | 4 |
Sueño profundo | 5 |
MOR | 6 |
En la guía para escribir datos de sueño, se muestra cómo se representan los datos de sueño detallados y no detallados en Fit.
Android
En los siguientes ejemplos, se usa un SessionClient para recuperar datos de Fit en ambos casos.
val SLEEP_STAGE_NAMES = arrayOf( "Unused", "Awake (during sleep)", "Sleep", "Out-of-bed", "Light sleep", "Deep sleep", "REM sleep" ) val request = SessionReadRequest.Builder() .readSessionsFromAllApps() // By default, only activity sessions are included, so it is necessary to explicitly // request sleep sessions. This will cause activity sessions to be *excluded*. .includeSleepSessions() // Sleep segment data is required for details of the fine-granularity sleep, if it is present. .read(DataType.TYPE_SLEEP_SEGMENT) .setTimeInterval(startTime, endTime, TimeUnit.MILLISECONDS) .build() sessionsClient.readSession(request) .addOnSuccessListener { response -> for (session in response.sessions) { val sessionStart = session.getStartTime(TimeUnit.MILLISECONDS) val sessionEnd = session.getEndTime(TimeUnit.MILLISECONDS) Log.i(TAG, "Sleep between $sessionStart and $sessionEnd") // If the sleep session has finer granularity sub-components, extract them: val dataSets = response.getDataSet(session) for (dataSet in dataSets) { for (point in dataSet.dataPoints) { val sleepStageVal = point.getValue(Field.FIELD_SLEEP_SEGMENT_TYPE).asInt() val sleepStage = SLEEP_STAGE_NAMES[sleepStageVal] val segmentStart = point.getStartTime(TimeUnit.MILLISECONDS) val segmentEnd = point.getEndTime(TimeUnit.MILLISECONDS) Log.i(TAG, "\t* Type $sleepStage between $segmentStart and $segmentEnd") } } } }
REST
La recuperación de sesiones de sueño mediante la API de REST es un proceso de dos etapas:
Recupera una lista de sesiones que configure el parámetro
activityType
en72
(SLEEP
). Nota: Puedes usar unstartTime
yendTime
, o usar un pageToken para recuperar sesiones nuevas desde la solicitud anterior.Método HTTP
GET
Request URL (URL de solicitud)
https://www.googleapis.com/fitness/v1/users/me/sessions?startTime=2019-12-05T00:00.000Z&endTime=2019-12-17T23:59:59.999Z&activityType=72
Respuesta
Un ejemplo de respuesta de Session podría ser el siguiente:
{ "session": [ { "id": "Sleep1575505620000", "name": "Sleep", "description": "", "startTimeMillis": "1575505620000", "endTimeMillis": "1575526800000", "modifiedTimeMillis": "1575590432413", "application": { "packageName": "com.example.sleep_tracker" }, "activityType": 72 // Sleep }, { "id": "Run2939075083", "name": "Mud", "description": "", "startTimeMillis": "1576594403000", "endTimeMillis": "1576598754000", "modifiedTimeMillis": "1576616010143", "application": { "packageName": "com.example.run_tracker" }, "activityType": 8 // Running } ], "deletedSession": [], "nextPageToken": "1576598754001" }
A fin de obtener detalles sobre las etapas del sueño para cada sesión (si las hay), usa la siguiente solicitud para cada sesión en la lista filtrada:
Método HTTP
POST
Request URL (URL de solicitud)
https://www.googleapis.com/fitness/v1/users/userId/dataset:aggregate
Cuerpo de la solicitud
{ "aggregateBy": [ { "dataTypeName": "com.google.sleep.segment" } ], "endTimeMillis": 1575609060000, "startTimeMillis": 1575591360000 }
Respuesta
Si la solicitud se realiza correctamente, recibirás un código de estado de respuesta HTTP
200 OK
. El cuerpo de la respuesta contiene una representación JSON de los segmentos de actividad que componen la sesión de sueño. CadaintVal
representa el tipo de actividad de sueño{ "bucket": [ { "startTimeMillis": "1575591360000", "endTimeMillis": "1575609060000", "dataset": [ { "point": [ { "startTimeNanos": "1575591360000000000", "endTimeNanos": "1575595020000000000", "dataTypeName": "com.google.sleep.segment", "originDataSourceId": "...", "value": [ { "intVal": 4, // Light sleep "mapVal": [] } ] }, { "startTimeNanos": "1575595020000000000", "endTimeNanos": "1575596220000000000", "dataTypeName": "com.google.sleep.segment", "originDataSourceId": "...", "value": [ { "intVal": 1, // Sleep "mapVal": [] } ] }, // .... more datapoints { "startTimeNanos": "1575605940000000000", "endTimeNanos": "1575609060000000000", "dataTypeName": "com.google.sleep.segment", "originDataSourceId": "...", "value": [ { "intVal": 4, // Light sleep "mapVal": [] } ] } ] } ] } ] }