Uyku Verilerini Okuma

Uyku, sleep türündeki oturumlar ile temsil edilir. Seanslar isteğe bağlı olarak uyku aşamaları içerebilir. Bu aşamalarda uyku verileri hakkında daha ayrıntılı ayrıntılar yer alır. Örneğin hafif, derin veya REM uykusu ise:

Uyku aşaması değerleri
Uyku evresi türü Değer
Uyanık (uyku döngüsü sırasında) 1
Uyku 2
Yatak dışında 3
Hafif uyuma 4
Derin uyuma 5
REM 6

Uyku verilerini yazma kılavuzu, hem ayrıntılı hem de ayrıntılı olmayan uyku verilerinin Fit'te nasıl temsil edildiğini gösterir.

Android

Aşağıdaki örnekler her iki durumda da Fit'ten veri almak için bir SessionClient kullanır.

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'yi kullanarak uyku seansları almak iki aşamalı bir işlemdir:

  1. activityType parametresini 72 (SLEEP) olarak ayarlayan oturumların listesini alın. Not: startTime ve endTime kullanabilir ya da önceki istekten sonraki yeni oturumları almak için pageToken kullanabilirsiniz.

    HTTP yöntemi

    GET
    

    İstek URL'si

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

    Yanıt

    Örnek Oturum yanıtı şöyle olabilir:

    {
     "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. Her oturumda (varsa) uyku aşamalarının ayrıntılarını öğrenmek için filtrelenmiş listedeki her oturum için aşağıdaki isteği kullanın:

    HTTP yöntemi

    POST
    

    İstek URL'si

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

    İstek metni

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

    Yanıt

    İsteğiniz başarılı olduysa 200 OK HTTP yanıt durum kodu alırsınız. Yanıt gövdesi, uyku seansını oluşturan aktivite segmentlerinin JSON temsilini içerir. Her intVal uyku etkinlik türünü temsil eder

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