Sen jest reprezentowany przez sesje typu sleep.
Sesje mogą opcjonalnie zawierać fazy snu, które zawierają bardziej szczegółowe informacje o danych o śnie. Na przykład czy był to sen płytki, głęboki czy REM:
Wartości faz snu
| Rodzaj fazy snu | Wartość |
|---|---|
| Wybudzenie (podczas cyklu snu) | 1 |
| Sen | 2 |
| Poza łóżkiem | 3 |
| Lekki sen | 4 |
| Głęboki sen | 5 |
| REM | 6 |
W przewodniku Zapisywanie danych o śnie znajdziesz informacje o tym, jak w Fit są reprezentowane szczegółowe i mniej szczegółowe dane o śnie.
Android
W obu przypadkach w przykładach poniżej używany jest obiekt SessionClient do pobierania danych z Fit.
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
Pobieranie sesji snu za pomocą interfejsu REST API to proces dwuetapowy:
Pobierz listę sesji, ustawiając parametr
activityTypena72(SLEEP). Uwaga: możesz użyć parametrówstartTimeiendTimelub parametru pageToken do pobrania nowych sesji od czasu poprzedniego żądania.Metoda HTTP
GETAdres URL żądania
https://www.googleapis.com/fitness/v1/users/me/sessions?startTime=2019-12-05T00:00.000Z&endTime=2019-12-17T23:59:59.999Z&activityType=72Odpowiedź
Przykładowa odpowiedź Session może wyglądać tak:
{ "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" }Aby uzyskać szczegółowe informacje o fazach snu w każdej sesji (jeśli są dostępne), użyj tego żądania w przypadku każdej sesji na przefiltrowanej liście:
Metoda HTTP
POSTAdres URL żądania
https://www.googleapis.com/fitness/v1/users/userId/dataset:aggregateTreść żądania
{ "aggregateBy": [ { "dataTypeName": "com.google.sleep.segment" } ], "endTimeMillis": 1575609060000, "startTimeMillis": 1575591360000 }Odpowiedź
Jeśli Twoje żądanie zostało zrealizowane, otrzymasz kod stanu odpowiedzi HTTP
200 OK. Treść odpowiedzi zawiera reprezentację JSON segmentów aktywności, które składają się na sesję snu. Każdy symbolintValoznacza typ aktywności związanej ze snem.{ "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": [] } ] } ] } ] } ] }