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

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

قيم مرحلة النوم
نوع مرحلة النوم القيمة
الاستيقاظ (أثناء دورة النوم) 1
النوم 2
خارج السرير 3
نوم خفيف 4
نوم عميق 5
حركة العين السريعة 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 عبارة عن عملية من مرحلتَين:

  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
    }
    

    الرد

    إذا تم قبول طلبك، ستحصل على الرمز 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": []
            }
           ]
          }
         ]
        }
       ]
      }
     ]
    }