В следующем примере показано, как читать необработанные данные в рамках общего рабочего процесса.
Чтение данных
Health Connect позволяет приложениям считывать данные из хранилища данных, когда приложение находится на переднем плане и в фоновом режиме:
Чтение на переднем плане : обычно вы можете читать данные из Health Connect, когда ваше приложение находится на переднем плане. В этих случаях вы можете рассмотреть возможность использования службы переднего плана для запуска этой операции на случай, если пользователь или система помещает ваше приложение в фоновый режим во время операции чтения.
Фоновое чтение . Запросив у пользователя дополнительное разрешение, вы можете читать данные после того, как пользователь или система поместит ваше приложение в фоновый режим. См. полный пример фонового чтения .
Тип данных «Шаги» в Health Connect фиксирует количество шагов, которые пользователь сделал между показаниями. Подсчет шагов представляет собой общий показатель на платформах здравоохранения, фитнеса и хорошего самочувствия. Health Connect упрощает чтение и запись данных о количестве шагов.
Чтобы прочитать записи, создайте ReadRecordsRequest
и укажите его при вызове readRecords
.
В следующем примере показано, как считать данные о количестве шагов пользователя за определенное время. Расширенный пример с SensorManager
см. в руководстве по подсчету шагов .
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
}
}
Пример фонового чтения
Чтобы читать данные в фоновом режиме, объявите следующее разрешение в файле манифеста:
<application>
<uses-permission android:name="android.permission.health.READ_HEALTH_DATA_IN_BACKGROUND" />
...
</application>
В следующем примере показано, как считывать данные о количестве шагов в фоновом режиме для пользователя в течение определенного времени с помощью 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
...
}
Чтение ранее записанных данных
Если приложение ранее записывало записи в Health Connect, это приложение может прочитать их обратно, не требуя разрешения на чтение для этих конкретных записей. Это применимо к сценариям, в которых приложению необходимо повторно синхронизироваться с Health Connect после его переустановки пользователем.
Чтобы прочитать данные в этом сценарии, вам необходимо указать имя пакета в качестве объекта DataOrigin
в параметре dataOriginFilter
вашего ReadRecordsRequest
.
В следующем примере показано, как указать имя пакета при чтении записей шагов:
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
}
Читать ограничения
По умолчанию ваше приложение может считывать данные за период до 30 дней с любыми предоставленными разрешениями. С разрешением PERMISSION_READ_HEALTH_DATA_HISTORY
ваше приложение может читать данные старше 30 дней.
30-дневное ограничение
Health Connect может считывать данные за 30 дней до момента первого предоставления разрешения.
Однако если пользователь удаляет ваше приложение, история разрешений теряется. Если пользователь переустановит ваше приложение и снова предоставит разрешение, ваше приложение сможет считывать данные из Health Connect за 30 дней до этой новой даты.
пример 30-дневного периода
Если пользователь впервые предоставил разрешение на чтение вашему приложению 30 марта 2023 года, самые ранние данные, которые ваше приложение сможет прочитать, будут начиная с 28 февраля 2023 года .
Затем пользователь удаляет ваше приложение 10 мая 2023 г. Пользователь решает переустановить его 15 мая 2023 г. и предоставить разрешение на чтение. Самая ранняя дата, с которой ваше приложение теперь может считывать данные, — 15 апреля 2023 года .
Чтение данных старше 30 дней.
Если вы хотите прочитать данные старше 30 дней, вы должны использовать разрешение PERMISSION_READ_HEALTH_DATA_HISTORY
. Без этого разрешения попытка прочитать одну запись старше 30 дней приведет к ошибке. Вы также не можете прочитать данные старше 30 дней, используя один из запросов временного диапазона.