Ứng dụng của bạn có thể đọc và ghi dữ liệu chi tiết về giấc ngủ.
Bao gồm các giai đoạn ngủ nông, ngủ sâu, ngủ mắt chuyển động nhanh (REM) và ngủ tỉnh giấc trong loại liệt kê SleepStages
. Để ghi dữ liệu giấc ngủ, bạn phải tạo một phiên thuộc loại FitnessActivities.SLEEP
.
Dữ liệu giấc ngủ phải được đóng gói trong một phiên nếu dữ liệu đó xuất hiện trong Nhật ký của người dùng trong Ứng dụng Google Fit.
Chèn phân đoạn thuộc loại SleepStages
trong phiên (không bắt buộc)
SleepStages.SLEEP_LIGHT
SleepStages.SLEEP_DEEP
SleepStages.SLEEP_REM
SleepStages.AWAKE
SleepStages.OUT_OF_BED
Ví dụ về độ không chi tiết
Để ghi một giấc ngủ mà không kèm theo thông tin chi tiết về giai đoạn ngủ, hãy làm theo ví dụ bên dưới.
Tạo một phiên có thời gian bắt đầu và kết thúc cũng như chế độ NGỦ (NGỘP) activity
.
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) }
Đọc thêm thông tin chi tiết về các phiên trong Android.
Kiến trúc chuyển trạng thái đại diện (REST)
Phương thức HTTP
PUT
URL yêu cầu
https://www.googleapis.com/fitness/v1/users/me/sessions/identifier
Nội dung yêu cầu
{
"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
}
Ví dụ chi tiết về các giai đoạn ngủ
Để ghi dữ liệu giấc ngủ theo từng giai đoạn chi tiết, hãy ghi cả phiên giấc ngủ cấp cao nhất và các phân đoạn cho các giai đoạn ngủ khác nhau.
Ghi các phân đoạn giấc ngủ
Trong ví dụ này, chúng tôi sẽ viết một vài phân đoạn để thể hiện một số giai đoạn ngủ trong một đêm ngủ.
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()
Kiến trúc chuyển trạng thái đại diện (REST)
Trước tiên, hãy tạo
dataSource
:Phương thức HTTP
POST
URL yêu cầu
https://www.googleapis.com/fitness/v1/users/me/dataSources
Nội dung yêu cầu
{ "dataStreamName": streamName, "type": "raw", "application": { "detailsUrl": "http://example.com", "name": "Foo Example App", "version": "1" }, "dataType": { "name": "com.google.sleep.segment" } }
Sau đó, điền vào
dataSet
:Phương thức HTTP
PATCH
URL yêu cầu
https://www.googleapis.com/fitness/v1/users/userId/dataSources/dataSourceId/datasets/datasetId
Nội dung yêu cầu
{ "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 } ] } ] }
Ghi dữ liệu về giấc ngủ
Cuối cùng, hãy nhóm các phân đoạn ở trên bằng cách chèn một phiên giấc ngủ. Đặt thời gian bắt đầu của phiên này thành thời gian bắt đầu của phân đoạn đầu tiên và thời gian kết thúc đến thời gian kết thúc của phân đoạn cuối cùng.
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) }
Kiến trúc chuyển trạng thái đại diện (REST)
Phương thức HTTP
PUT
URL yêu cầu
https://www.googleapis.com/fitness/v1/users/me/sessions/identifier
Nội dung yêu cầu
{
"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
}