Schlafdaten lesen

Der Schlaf wird in Sitzungen dargestellt. vom Typ sleep. Sitzungen können optional Schlafphasen mit detaillierteren Details enthalten. zu Schlafdaten. Zum Beispiel im Leicht-, Tief- oder REM-Schlaf Schlaf:

Werte der Schlafphasen
Art der Schlafphase Wert
Wach (im Schlafzyklus) 1
Schlaf 2
Aus dem Bett 3
Leichter Schlaf 4
Tiefschlaf 5
REM-Schlaf 6

Im Leitfaden Schlafdaten schreiben erfährst du, wie sowohl Detaillierte und nicht detaillierte Schlafdaten werden in Fit dargestellt.

Android

In den folgenden Beispielen wird ein SessionClient um Daten aus Fit abzurufen.

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

Das Abrufen von Schlafsitzungen erfolgt über die REST API in zwei Phasen:

  1. Liste der Sitzungen abrufen Der Parameter activityType wird auf 72 (SLEEP) festgelegt. Hinweis: Sie können startTime und endTime oder ein pageToken verwenden. um seit der vorherigen Anfrage neue Sitzungen abzurufen.

    HTTP-Methode

    GET
    

    Anfrage-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
    

    Antwort

    Ein Beispiel für eine Sitzung könnte dies so aussehen:

    {
     "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. Um Details zu den Schlafphasen für jede Sitzung (falls vorhanden) zu erhalten, verwende die folgende Anfrage für jede Sitzung in der gefilterten Liste an:

    HTTP-Methode

    POST
    

    Anfrage-URL

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

    Anfragetext

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

    Antwort

    Wenn deine Anfrage erfolgreich war, siehst du den HTTP-Antwortstatus „200 OK“ Code. Der Antworttext enthält eine JSON-Darstellung der Aktivität aus denen die Schlafeinheit besteht. Jeder intVal steht für den Aktivitätstyp des Schlafs

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