Ví dụ sau đây minh hoạ cách đọc dữ liệu thô trong quy trình công việc chung.
Đọc dữ liệu
Health Connect cho phép ứng dụng đọc dữ liệu từ kho dữ liệu khi ứng dụng ở chế độ nền trước và nền sau:
Đọc trên nền trước: Thông thường, bạn có thể đọc dữ liệu của Health Connect khi ứng dụng đang ở nền trước. Trong những trường hợp này, bạn có thể cân nhắc sử dụng dịch vụ trên nền trước để chạy thao tác này trong trường hợp người dùng hoặc hệ thống đặt ứng dụng của bạn ở chế độ nền trong quá trình đọc.
Đọc ở chế độ nền: Bằng cách yêu cầu người dùng cấp thêm quyền, bạn có thể đọc dữ liệu sau khi người dùng hoặc hệ thống đặt ứng dụng của bạn ở chế độ nền. Xem ví dụ đầy đủ về việc đọc ở chế độ nền.
Loại dữ liệu về Số bước trong Health Connect ghi lại số bước người dùng đi được giữa các kết quả đọc. Số bước chính là cách đo lường phổ biến trên các nền tảng về sức khoẻ, hoạt động thể chất và sức khoẻ tinh thần. Health Connect giúp bạn dễ dàng đọc và ghi dữ liệu về số bước.
Để đọc bản ghi, hãy tạo một ReadRecordsRequest
và cung cấp bản ghi đó khi bạn gọi readRecords
.
Ví dụ sau đây minh hoạ cách đọc dữ liệu về số bước của một người dùng trong một khoảng thời gian nhất định. Để biết ví dụ mở rộng với SensorManager
, hãy xem hướng dẫn về dữ liệu số bước.
suspend fun readStepsByTimeRange(
healthConnectClient: HealthConnectClient,
startTime: Instant,
endTime: Instant
) {
try {
val response = healthConnectClient.readRecords(
ReadRecordsRequest(
StepsRecord::class,
timeRangeFilter = TimeRangeFilter.between(startTime, endTime)
)
)
for (stepRecord in response.records) {
// Process each step record
}
} catch (e: Exception) {
// Run error handling here
}
}
Ví dụ về việc đọc ở chế độ nền
Để đọc dữ liệu ở chế độ nền, hãy khai báo quyền sau trong tệp kê khai:
<application>
<uses-permission android:name="android.permission.health.READ_HEALTH_DATA_IN_BACKGROUND" />
...
</application>
Ví dụ sau đây cho biết cách đọc dữ liệu về số bước ở chế độ nền cho một người dùng trong một khoảng thời gian nhất định bằng cách sử dụng WorkManager
:
class ScheduleWorker(private val appContext: Context, workerParams: WorkerParameters):
CoroutineWorker(appContext, workerParams) {
override suspend fun doWork(): Result {
// Read data and process it.
...
// Return success indicating successful data retrieval
return Result.success()
}
}
if (healthConnectClient
.features
.getFeatureStatus(
HealthConnectFeatures.FEATURE_READ_HEALTH_DATA_IN_BACKGROUND
) == HealthConnectFeatures.FEATURE_STATUS_AVAILABLE) {
// Check if necessary permission is granted
val grantedPermissions = healthConnectClient.permissionController.getGrantedPermissions()
if (PERMISSION_READ_HEALTH_DATA_IN_BACKGROUND !in grantedPermissions) {
// Perform read in foreground
...
} else {
// Schedule the periodic work request in background
val periodicWorkRequest = PeriodicWorkRequestBuilder<ScheduleWorker>(1, TimeUnit.HOURS)
.build()
WorkManager.getInstance(context).enqueueUniquePeriodicWork(
"read_health_connect",
ExistingPeriodicWorkPolicy.KEEP,
periodicWorkRequest
)
}
} else {
// Background reading is not available, perform read in foreground
...
}
Đọc dữ liệu đã ghi trước đây
Nếu trước đây, một ứng dụng đã ghi bản ghi vào Health Connect, thì ứng dụng đó có thể đọc lại bản ghi mà không cần quyền Đọc đối với các bản ghi cụ thể đó. Cách này áp dụng cho các trường hợp mà trong đó, ứng dụng cần đồng bộ hoá lại với Health Connect sau khi người dùng cài đặt lại ứng dụng này.
Để đọc dữ liệu trong trường hợp này, bạn cần biểu thị tên gói ở dạng đối tượng DataOrigin
trong tham số dataOriginFilter
của ReadRecordsRequest
.
Ví dụ sau đây cho biết cách biểu thị tên gói khi đọc bản ghi về Số bước:
try {
val response = healthConnectClient.readRecords(
ReadRecordsRequest(
recordType = StepsRecord::class,
timeRangeFilter = TimeRangeFilter.between(startTime, endTime),
dataOriginFilter = setOf(DataOrigin("com.my.package.name"))
)
)
for (record in response.records) {
// Process each record
}
} catch (e: Exception) {
// Run error handling here
}
Hạn chế về việc đọc
Theo mặc định, ứng dụng của bạn có thể đọc dữ liệu trong tối đa 30 ngày khi được cấp bất kỳ quyền nào.
Với quyền PERMISSION_READ_HEALTH_DATA_HISTORY
, ứng dụng của bạn có thể đọc dữ liệu cũ hơn 30 ngày.
Hạn chế trong 30 ngày
Ứng dụng có thể đọc dữ liệu từ Health Connect trong vòng tối đa 30 ngày trước thời điểm cấp quyền lần đầu.
Tuy nhiên, nếu người dùng xoá ứng dụng của bạn, nhật ký cấp quyền sẽ bị mất. Nếu người dùng cài đặt lại ứng dụng của bạn và cấp lại quyền, thì ứng dụng có thể đọc dữ liệu của Health Connect trong vòng tối đa 30 ngày trước ngày mới đó.
Ví dụ về 30 ngày
Nếu người dùng cấp cho ứng dụng của bạn quyền đọc dữ liệu lần đầu là vào ngày 30 tháng 3 năm 2023, thì dữ liệu cũ nhất mà ứng dụng có thể đọc sẽ là từ ngày 28 tháng 2 năm 2023 trở đi.
Sau đó, người dùng xoá ứng dụng của bạn vào ngày 10 tháng 5 năm 2023. Người dùng quyết định cài đặt lại vào ngày 15 tháng 5 năm 2023 và cấp quyền đọc. Lúc này, ứng dụng của bạn có thể đọc dữ liệu từ ngày 15 tháng 4 năm 2023.
Đọc dữ liệu cũ hơn 30 ngày
Nếu muốn đọc dữ liệu cũ hơn 30 ngày, bạn phải sử dụng quyền PERMISSION_READ_HEALTH_DATA_HISTORY
. Nếu không có quyền này, thao tác đọc một bản ghi cũ hơn 30 ngày sẽ dẫn đến lỗi.
Bạn cũng không thể đọc bất kỳ dữ liệu nào cũ hơn 30 ngày bằng một trong các yêu cầu về phạm vi thời gian.