Leer datos de sueño
Organiza tus páginas con colecciones
Guarda y categoriza el contenido según tus preferencias.
El sueño se representa mediante sesiones
del tipo sleep
.
De manera opcional, las sesiones pueden contener fases del sueño, con detalles más detallados
sobre los datos de sueño. Por ejemplo, si fue ligero, profundo o REM
sueño:
Valores de las fases del sueño
Tipo de fase del sueño |
Valor |
Despierto/a (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 sobre cómo escribir datos de sueño, se muestra cómo tanto
en Fit, están los datos de sueño detallados y no granulares.
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 con la API de REST es un proceso de dos etapas:
Cómo obtener una lista de sesiones
establecer el parámetro activityType
en 72
(SLEEP
)
Nota: Puedes usar un startTime
y endTime
, o bien 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
Una sesión de ejemplo
de respuesta podría ser la 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"
}
Para obtener detalles sobre las fases del sueño de 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 tu solicitud se realizó correctamente, recibirás un estado de respuesta HTTP 200 OK
código. El cuerpo de la respuesta contiene una representación JSON de la actividad
segmentos que componen la sesión de sueño. Cada intVal
representa la
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": []
}
]
}
]
}
]
}
]
}
Salvo que se indique lo contrario, el contenido de esta página está sujeto a la licencia Atribución 4.0 de Creative Commons, y los ejemplos de código están sujetos a la licencia Apache 2.0. Para obtener más información, consulta las políticas del sitio de Google Developers. Java es una marca registrada de Oracle o sus afiliados.
Última actualización: 2025-08-31 (UTC)
[null,null,["Última actualización: 2025-08-31 (UTC)"],[[["\u003cp\u003eSleep data in Google Fit is stored as sessions of type \u003ccode\u003esleep\u003c/code\u003e and can optionally contain detailed sleep stage information.\u003c/p\u003e\n"],["\u003cp\u003eSleep stages are categorized with specific values, such as 1 for awake, 4 for light sleep, and 6 for REM sleep.\u003c/p\u003e\n"],["\u003cp\u003eAndroid developers can use the \u003ccode\u003eSessionClient\u003c/code\u003e and \u003ccode\u003eSessionReadRequest\u003c/code\u003e to retrieve both basic and detailed sleep data.\u003c/p\u003e\n"],["\u003cp\u003eREST API access involves a two-step process: retrieving a list of sleep sessions, then requesting detailed sleep stage data for each session if available.\u003c/p\u003e\n"],["\u003cp\u003eSleep stage details from the REST API are provided as \u003ccode\u003eintVal\u003c/code\u003e values within the response, corresponding to the sleep stage categories.\u003c/p\u003e\n"]]],[],null,["# Read Sleep Data\n\nSleep is represented by [sessions](https://developers.google.com/fit/rest/v1/using-sessions)\nof type [`sleep`](https://developers.google.com/fit/rest/v1/reference/activity-types).\nSessions can optionally contain sleep stages, which have more granular details\nabout sleep data. For example, if it was light, deep or REM\nsleep:\n\n##### Sleep stage values\n\n| Sleep stage type | Value |\n|----------------------------|-------|\n| Awake (during sleep cycle) | 1 |\n| Sleep | 2 |\n| Out-of-bed | 3 |\n| Light sleep | 4 |\n| Deep sleep | 5 |\n| REM | 6 |\n\nThe [write sleep data](/fit/scenarios/write-sleep-data) guide shows how both\ngranular and non-granular sleep data is represented in Fit. \n\n### Android\n\nThe follow samples uses a [SessionClient](https://developers.google.com/android/reference/com/google/android/gms/fitness/SessionsClient.html)\nto retrieve data from Fit, for both cases. \n\n```kotlin\nval SLEEP_STAGE_NAMES = arrayOf(\n \"Unused\",\n \"Awake (during sleep)\",\n \"Sleep\",\n \"Out-of-bed\",\n \"Light sleep\",\n \"Deep sleep\",\n \"REM sleep\"\n)\n\nval request = SessionReadRequest.Builder()\n .readSessionsFromAllApps()\n // By default, only activity sessions are included, so it is necessary to explicitly\n // request sleep sessions. This will cause activity sessions to be *excluded*.\n .includeSleepSessions()\n // Sleep segment data is required for details of the fine-granularity sleep, if it is present.\n .read(DataType.TYPE_SLEEP_SEGMENT)\n .setTimeInterval(startTime, endTime, TimeUnit.MILLISECONDS)\n .build()\n\nsessionsClient.readSession(request)\n .addOnSuccessListener { response -\u003e\n for (session in response.sessions) {\n val sessionStart = session.getStartTime(TimeUnit.MILLISECONDS)\n val sessionEnd = session.getEndTime(TimeUnit.MILLISECONDS)\n Log.i(TAG, \"Sleep between $sessionStart and $sessionEnd\")\n\n // If the sleep session has finer granularity sub-components, extract them:\n val dataSets = response.getDataSet(session)\n for (dataSet in dataSets) {\n for (point in dataSet.dataPoints) {\n val sleepStageVal = point.getValue(Field.FIELD_SLEEP_SEGMENT_TYPE).asInt()\n val sleepStage = SLEEP_STAGE_NAMES[sleepStageVal]\n val segmentStart = point.getStartTime(TimeUnit.MILLISECONDS)\n val segmentEnd = point.getEndTime(TimeUnit.MILLISECONDS)\n Log.i(TAG, \"\\t* Type $sleepStage between $segmentStart and $segmentEnd\")\n }\n }\n }\n }\n```\n\n### REST\n\nRetrieving sleep sessions using the REST API is a two stage process:\n\n1. [Retrieve a list of sessions](https://developers.google.com/fit/rest/v1/using-sessions#list_existing_sessions)\n setting the [`activityType`](https://developers.google.com/fit/rest/v1/reference/activity-types) parameter to `72` (`SLEEP`).\n Note: You can use a `startTime` and `endTime`, or use a [pageToken](https://developers.google.com/fit/rest/v1/reference/users/sessions/list#parameters)\n to retrieve new sessions since the previous request.\n\n **HTTP method** \n\n GET\n\n **Request URL** \n\n https://www.googleapis.com/fitness/v1/users/me/sessions?startTime=2019-12-05T00:00.000Z&endTime=2019-12-17T23:59:59.999Z&activityType=72\n\n **Response**\n\n An example [Session](https://developers.google.com/fit/rest/v1/reference/users/sessions/list#response_1)\n response might be: \n\n {\n \"session\": [\n {\n \"id\": \"Sleep1575505620000\",\n \"name\": \"Sleep\",\n \"description\": \"\",\n \"startTimeMillis\": \"1575505620000\",\n \"endTimeMillis\": \"1575526800000\",\n \"modifiedTimeMillis\": \"1575590432413\",\n \"application\": {\n \"packageName\": \"com.example.sleep_tracker\"\n },\n \"activityType\": 72 // Sleep\n },\n {\n \"id\": \"Run2939075083\",\n \"name\": \"Mud\",\n \"description\": \"\",\n \"startTimeMillis\": \"1576594403000\",\n \"endTimeMillis\": \"1576598754000\",\n \"modifiedTimeMillis\": \"1576616010143\",\n \"application\": {\n \"packageName\": \"com.example.run_tracker\"\n },\n \"activityType\": 8 // Running\n }\n ],\n \"deletedSession\": [],\n \"nextPageToken\": \"1576598754001\"\n }\n\n2. To obtain details of sleep stages for each session (if present), use the\n following request for each session in the filtered list:\n\n **HTTP method** \n\n POST\n\n **Request URL** \n\n https://www.googleapis.com/fitness/v1/users/userId/dataset:aggregate\n\n **Request body** \n\n {\n \"aggregateBy\": [\n {\n \"dataTypeName\": \"com.google.sleep.segment\"\n }\n ],\n \"endTimeMillis\": 1575609060000,\n \"startTimeMillis\": 1575591360000\n }\n\n **Response**\n\n If your request was successful, you'll get a `200 OK` HTTP response status\n code. The response body contains a JSON representation of activity\n segments that comprise the sleep session. Each `intVal` represents the\n sleep [activity type](#sleep_activity_values) \n\n {\n \"bucket\": [\n {\n \"startTimeMillis\": \"1575591360000\",\n \"endTimeMillis\": \"1575609060000\",\n \"dataset\": [\n {\n \"point\": [\n {\n \"startTimeNanos\": \"1575591360000000000\",\n \"endTimeNanos\": \"1575595020000000000\",\n \"dataTypeName\": \"com.google.sleep.segment\",\n \"originDataSourceId\": \"...\",\n \"value\": [\n {\n \"intVal\": 4, // Light sleep\n \"mapVal\": []\n }\n ]\n },\n {\n \"startTimeNanos\": \"1575595020000000000\",\n \"endTimeNanos\": \"1575596220000000000\",\n \"dataTypeName\": \"com.google.sleep.segment\",\n \"originDataSourceId\": \"...\",\n \"value\": [\n {\n \"intVal\": 1, // Sleep\n \"mapVal\": []\n }\n ]\n },\n\n // .... more datapoints\n\n {\n \"startTimeNanos\": \"1575605940000000000\",\n \"endTimeNanos\": \"1575609060000000000\",\n \"dataTypeName\": \"com.google.sleep.segment\",\n \"originDataSourceId\": \"...\",\n \"value\": [\n {\n \"intVal\": 4, // Light sleep\n \"mapVal\": []\n }\n ]\n }\n ]\n }\n ]\n }\n ]\n }"]]