Gravar dados de sono

Seu app pode ler e gravar dados granulares de sono. Isso inclui os estágios do sono leve, profundo, REM e acordado do tipo SleepStages enumerado. Para gravar dados de sono, crie uma sessão do tipo FitnessActivities.SLEEP. Os dados de sono precisam ser encapsulados em uma sessão para aparecerem no Diário do usuário no app Google Fit.

Se quiser, insira segmentos do tipo SleepStages na sessão:

Exemplo sem granularidade

Para gravar uma noite de sono sem granularidade de estágio, siga o exemplo abaixo. Crie uma sessão com horário de início e término e a activity SLEEP.

Android

val fitnessOptions = FitnessOptions.builder()
    .accessSleepSessions(FitnessOptions.ACCESS_WRITE)
    .build()

// Create the sleep session
val session= Session.Builder()
    .setName(sessionName)
    .setIdentifier(identifier)
    .setDescription(description)
    .setStartTime(startTime, TimeUnit.MILLISECONDS)
    .setEndTime(endTime, TimeUnit.MILLISECONDS)
    .setActivity(FitnessActivities.SLEEP)
    .build()

// Build the request to insert the session.
val request = SessionInsertRequest.Builder()
    .setSession(session)
    .build()

// Insert the session into Fit platform
Log.i(TAG, "Inserting the session with the SessionsClient")
Fitness.getSessionsClient(this, GoogleSignIn.getAccountForExtension(this, fitnessOptions))
    .insertSession(request)
    .addOnSuccessListener {
        Log.i(TAG,"Session insert was successful!")
    }
    .addOnFailureListener { e ->
        Log.w(TAG, "There was a problem inserting the session", e)
    }

Leia mais detalhes sobre as sessões no Android.

REST

Método HTTP

PUT

Request URL

https://www.googleapis.com/fitness/v1/users/me/sessions/identifier

Corpo da solicitação

{
    "id": identifier,
    "name": sessionName,
    "description": description,
    "startTimeMillis": startTime,
    "endTimeMillis": endTime,
    "version": 1,
    "lastModifiedToken": "exampleToken",
    "application": {
        "detailsUrl": "http://example.com",
        "name": "Foo Example App",
        "version": "1.0"
    },
    "activityType": 72 // Sleep
}

Exemplo de granularidade de estágios do sono

Para gravar o sono com granularidade de estágios, grave tanto a sessão de sono de nível superior quanto os segmentos dos diferentes estágios do sono.

Gravar segmentos de sono

Neste exemplo, vamos gravar vários segmentos para representar os vários estágios de sono durante uma noite.

Android

val dataSource = DataSource.Builder()
    .setType(DataSource.TYPE_RAW)
    .setDataType(DataType.TYPE_SLEEP_SEGMENT)
    .setAppPackageName(context)
    // Optional but recommended for identifying the stream if you have multiple streams with the same dataType.
    .setStreamName(streamName)
    .build()

val dataPoints = listOf(
    DataPoint.builder(dataSource)
        .setTimeInterval(startTime1, endTime1, TimeUnit.MILLISECONDS)
        .setField(Field.FIELD_SLEEP_SEGMENT_TYPE, SleepStages.SLEEP_LIGHT)
        .build(),
    DataPoint.builder(dataSource)
        .setTimeInterval(startTime2, endTime2, TimeUnit.MILLISECONDS)
        .setField(Field.FIELD_SLEEP_SEGMENT_TYPE, SleepStages.SLEEP_DEEP)
        .build(),
    DataPoint.builder(dataSource)
        .setTimeInterval(startTime3, endTime3, TimeUnit.MILLISECONDS)
        .setField(Field.FIELD_SLEEP_SEGMENT_TYPE, SleepStages.SLEEP_LIGHT)
        .build(),
    DataPoint.builder(dataSource)
        .setTimeInterval(startTime4, endTime4, TimeUnit.MILLISECONDS)
        .setField(Field.FIELD_SLEEP_SEGMENT_TYPE, SleepStages.SLEEP_REM)
        .build(),
    DataPoint.builder(dataSource)
        .setTimeInterval(startTime5, endTime5, TimeUnit.MILLISECONDS)
        .setField(Field.FIELD_SLEEP_SEGMENT_TYPE, SleepStages.AWAKE)
        .build(),
    DataPoint.builder(dataSource)
        .setTimeInterval(startTime6, endTime6, TimeUnit.MILLISECONDS)
        .setField(Field.FIELD_SLEEP_SEGMENT_TYPE, SleepStages.SLEEP_LIGHT)
        .build()
)

val dataSet = DataSet.builder(dataSource)
    .addAll(dataPoints)
    .build()

REST

  1. Primeiro, crie o dataSource:

    Método HTTP

    POST
    

    Request URL

    https://www.googleapis.com/fitness/v1/users/me/dataSources
    

    Corpo da solicitação

    {
      "dataStreamName": streamName,
      "type": "raw",
      "application": {
        "detailsUrl": "http://example.com",
        "name": "Foo Example App",
        "version": "1"
      },
      "dataType": {
        "name": "com.google.sleep.segment"
      }
    }
    
  2. Em seguida, preencha o dataSet:

    Método HTTP

    PATCH
    

    Request URL

    https://www.googleapis.com/fitness/v1/users/userId/dataSources/dataSourceId/datasets/datasetId
    

    Corpo da solicitação

    {
        "dataSourceId": dataSourceId,
        "point": [
            {
                "dataTypeName": "com.google.sleep.segment",
                "startTimeNanos": startTime1,
                "endTimeNanos": endTime1,
                "value": [
                    {
                        intVal: 4 // Light sleep
                    }
                ]
            },
            {
                "dataTypeName": "com.google.sleep.segment",
                "startTimeNanos": startTime2,
                "endTimeNanos": endTime2,
                "value": [
                    {
                        intVal: 5 // Deep sleep
                    }
                ]
            },
            {
                "dataTypeName": "com.google.sleep.segment",
                "startTimeNanos": startTime3,
                "endTimeNanos": endTime3,
                "value": [
                    {
                        intVal: 4 // Light sleep
                    }
                ]
            },
            {
                "dataTypeName": "com.google.sleep.segment",
                "startTimeNanos": startTime4,
                "endTimeNanos": endTime4,
                "value": [
                    {
                        intVal: 6 // REM sleep
                    }
                ]
            },
            {
                "dataTypeName": "com.google.sleep.segment",
                "startTimeNanos": startTime5,
                "endTimeNanos": endTime5,
                "value": [
                    {
                        intVal: 1 // Awake
                    }
                ]
            },
            {
                "dataTypeName": "com.google.sleep.segment",
                "startTimeNanos": startTime6,
                "endTimeNanos": endTime6,
                "value": [
                    {
                        intVal: 4 // Light sleep
                    }
                ]
            }
         ]
     }
    

Gravar sessão de sono

Por fim, agrupe os segmentos acima inserindo uma sessão de sono. Defina o horário de início dessa sessão como o horário de início do primeiro segmento e o horário de término como o horário de término do último segmento.

Android

val fitnessOptions = FitnessOptions.builder()
    .accessSleepSessions(FitnessOptions.ACCESS_WRITE)
    .addDataType(DataType.TYPE_SLEEP_SEGMENT, FitnessOptions.ACCESS_WRITE)
    .build()

val session = Session.Builder()
    .setName(sessionName)
    .setIdentifier(identifier)
    .setDescription(description)
    .setStartTime(startTime1, TimeUnit.MILLISECONDS) // From first segment
    .setEndTime(endTime6, TimeUnit.MILLISECONDS) // From last segment
    .setActivity(FitnessActivities.SLEEP)
    .build()

// Build the request to insert the session.
val request = SessionInsertRequest.Builder()
    .setSession(session)
    .addDataSet(dataset)
    .build()

// Insert the session into Fit platform
Log.i(TAG, "Inserting the session in the Sessions API")
Fitness.getSessionsClient(this, GoogleSignIn.getAccountForExtension(this, fitnessOptions))
    .insertSession(request)
    .addOnSuccessListener {
        Log.i(TAG,"Session insert was successful!")
    }
    .addOnFailureListener { e ->
        Log.i(TAG, "There was a problem inserting the session", e)
    }

REST

Método HTTP

PUT

Request URL

https://www.googleapis.com/fitness/v1/users/me/sessions/identifier

Corpo da solicitação

{
    "id": identifier,
    "name": sessionName,
    "description": description,
    "startTimeMillis": startTime1,
    "endTimeMillis": endTime6,
    "version": 1,
    "lastModifiedToken": "exampleToken",
    "application": {
        "detailsUrl": "http://example.com",
        "name": "Foo Example App",
        "version": "1.0"
    },
    "activityType": 72 // Sleep
}