قراءة بيانات النوم

يتم تمثيل النوم بـ جلسات من النوع sleep. يمكن أن تحتوي الجلسات اختياريًا على مراحل النوم التي تتضمّن تفاصيل أكثر دقة حول بيانات النوم. على سبيل المثال، إذا كان النوم خفيفًا أو عميقًا أو نوم حركة العين السريعة:

قيم مراحل النوم
نوع مرحلة النوم القيمة
الاستيقاظ (أثناء دورة النوم) 1
النوم 2
الخروج من السرير 3
نوم خفيف 4
نوم عميق 5
REM 6

يعرض دليل كتابة بيانات النوم كيفية تمثيل بيانات النوم الدقيقة وغير الدقيقة في Fit.

Android

يستخدم المثال التالي SessionClient لاسترداد البيانات من 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

يتألف استرداد جلسات النوم باستخدام واجهة برمجة التطبيقات REST من مرحلتَين:

  1. استرداد قائمة بالجلسات مع ضبط المعلمة 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": [
        {
         "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. للحصول على تفاصيل مراحل النوم لكل جلسة (إن توفّرت)، استخدِم الطلب التالي لكل جلسة في القائمة التي تم فلترتها:

    طريقة HTTP

    POST
    

    عنوان URL للطلب

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

    نص الطلب

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

    الردّ

    إذا كان طلبك ناجحًا، سيظهر لك رمز حالة استجابة HTTP 200 OK. يحتوي نص الاستجابة على تمثيل 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": []
            }
           ]
          }
         ]
        }
       ]
      }
     ]
    }