Đọc dữ liệu về giấc ngủ

Giấc ngủ được biểu thị bằng các phiên loại sleep. Các phiên hoạt động có thể tuỳ ý chứa các giai đoạn ngủ, trong đó có thông tin chi tiết hơn về dữ liệu giấc ngủ. Ví dụ: nếu đèn ở chế độ sáng, sâu hoặc ngủ mắt chuyển động nhanh (REM):

Giá trị giai đoạn giấc ngủ
Loại giai đoạn giấc ngủ Giá trị
Thức (trong chu kỳ ngủ) 1
Ngủ 2
Ngoài giường 3
Ngủ nông 4
Ngủ sâu 5
Ngủ mắt chuyển động nhanh (REM) 6

Hướng dẫn về ghi dữ liệu giấc ngủ cho thấy cách dữ liệu chi tiết về giấc ngủ chi tiết và không chi tiết trong Fit.

Android

Các mẫu sau đây sử dụng SessionClient để truy xuất dữ liệu từ Fit, trong cả hai trường hợp.

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")
                }
            }
        }
    }

Kiến trúc chuyển trạng thái đại diện (REST)

Truy xuất phiên giấc ngủ bằng API REST là một quy trình hai giai đoạn:

  1. Truy xuất danh sách các phiên đặt thông số activityType thành 72 (SLEEP). Lưu ý: Bạn có thể sử dụng startTimeendTime hoặc sử dụng pageToken để truy xuất các phiên mới kể từ yêu cầu trước đó.

    Phương thức HTTP

    GET
    

    URL yêu cầu

    https://www.googleapis.com/fitness/v1/users/me/sessions?startTime=2019-12-05T00:00.000Z&endTime=2019-12-17T23:59:59.999Z&activityType=72
    

    Đáp

    Ví dụ về phản hồi Phiên hoạt động có thể là:

    {
     "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"
    }
    
  2. Để biết thông tin chi tiết về các giai đoạn ngủ của mỗi phiên (nếu có), hãy sử dụng yêu cầu sau cho mỗi phiên trong danh sách đã lọc:

    Phương thức HTTP

    POST
    

    URL yêu cầu

    https://www.googleapis.com/fitness/v1/users/userId/dataset:aggregate
    

    Nội dung yêu cầu

    {
      "aggregateBy": [
        {
          "dataTypeName": "com.google.sleep.segment"
        }
      ],
      "endTimeMillis": 1575609060000,
      "startTimeMillis": 1575591360000
    }
    

    Đáp

    Nếu yêu cầu của bạn thành công, bạn sẽ nhận được mã trạng thái phản hồi HTTP 200 OK. Phần nội dung phản hồi chứa bản trình bày JSON của các phân đoạn hoạt động bao gồm phiên giấc ngủ. Mỗi intVal đại diện cho loại hoạt động giấc ngủ

    {
     "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": []
            }
           ]
          }
         ]
        }
       ]
      }
     ]
    }