수면은 sleep
유형의 세션으로 표시됩니다.
세션에는 수면 데이터에 관한 더 상세한 세부정보가 있는 수면 단계를 선택적으로 포함할 수 있습니다. 예를 들어 얕은 수면, 깊은 수면, 렘 수면인 경우:
수면 단계 값
수면 단계 유형 | 값 |
---|---|
깨어남 (수면 주기 중) | 1 |
절전 모드 | 2 |
침대 외 | 3 |
얕은 수면 | 4 |
깊은 수면 | 5 |
렘 수면 | 6 |
수면 데이터 쓰기 가이드에서는 세분화된 수면 데이터와 세부 정보가 아닌 수면 데이터가 피트니스에서 어떻게 표시되는지 보여줍니다.
Android
다음 샘플은 두 경우 모두 SessionClient를 사용하여 피트니스에서 데이터를 검색합니다.
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
REST API를 사용하여 수면 세션을 검색하는 작업은 두 단계로 이루어집니다.
activityType
매개변수를72
(SLEEP
)로 설정하여 세션 목록을 가져옵니다. 참고:startTime
및endTime
을 사용하거나 pageToken을 사용하여 이전 요청 이후의 새 세션을 가져올 수 있습니다.HTTP 메소드
GET
요청 URL
https://www.googleapis.com/fitness/v1/users/me/sessions?startTime=2019-12-05T00:00.000Z&endTime=2019-12-17T23:59:59.999Z&activityType=72
응답
Session 응답의 예는 다음과 같습니다.
{ "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" }
각 세션 (있는 경우)의 수면 단계 세부정보를 가져오려면 필터링된 목록의 각 세션에 다음 요청을 사용합니다.
HTTP 메소드
POST
요청 URL
https://www.googleapis.com/fitness/v1/users/userId/dataset:aggregate
요청 본문
{ "aggregateBy": [ { "dataTypeName": "com.google.sleep.segment" } ], "endTimeMillis": 1575609060000, "startTimeMillis": 1575591360000 }
응답
요청이 성공하면
200 OK
HTTP 응답 상태 코드가 표시됩니다. 응답 본문에는 수면 세션을 구성하는 활동 세그먼트의 JSON 표현이 포함됩니다. 각intVal
는 수면 활동 유형을 나타냅니다.{ "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": [] } ] } ] } ] } ] }