Чтение необработанных данных

В следующем примере показано, как читать необработанные данные в рамках общего рабочего процесса.

Простое чтение

Тип данных «Шаги» в 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
    }
}

Чтение ранее записанных данных

Если приложение ранее записывало записи в 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-дневное ограничение на чтение

Health Connect может считывать данные за 30 дней до момента первого предоставления разрешения.

Однако если пользователь удаляет ваше приложение, история разрешений теряется. Если пользователь переустановит ваше приложение и снова предоставит разрешение, ваше приложение сможет считывать данные из Health Connect за 30 дней до этой новой даты.

Пример

Если пользователь впервые предоставил разрешение на чтение вашему приложению 30 марта 2023 года, самые ранние данные, которые ваше приложение сможет прочитать, будут начиная с 28 февраля 2023 года .

Затем пользователь удаляет ваше приложение 10 мая 2023 г. Пользователь решает переустановить его 15 мая 2023 г. и предоставить разрешение на чтение. Самая ранняя дата, с которой ваше приложение теперь может считывать данные, — 15 апреля 2023 года .

Ограничение переднего плана

Чтение данных с помощью Health Connect ограничено приложениями, работающими на переднем плане. Это ограничение введено для дальнейшего усиления конфиденциальности пользователей. Это гарантирует пользователям, что Health Connect не имеет доступа для чтения к их данным в фоновом режиме и что данные читаются и доступны только на переднем плане.

В ситуациях, когда прерывания допустимы , например при отображении показаний в вашем приложении, читайте данные непосредственно из Health Connect в клиентское приложение.

В ситуациях, когда вы предпочитаете не прерывать работу , например чтение ряда данных из Health Connect, а затем их запись и загрузка в другое место, используйте ForegroundService , а не Activity, где его можно быстро закрыть.