Ten przykład pokazuje, jak odczytać dane nieprzetworzone w ramach typowego procesu.
.Odczytywanie danych
Health Connect umożliwia aplikacjom odczytywanie danych z magazynu danych, gdy aplikacja jest na pierwszym planie i w tle:
Odczyt na pierwszym planie: możesz normalnie odczytywać dane z Health Connect, gdy aplikacja jest na pierwszym planie. W takich przypadkach możesz rozważyć użycie usługi na pierwszym planie do wykonania tej operacji na wypadek, gdyby użytkownik lub system umieścił Twoją aplikację w tle podczas operacji odczytu.
Odczytywanie w tle: jeśli poprosisz użytkownika o dodatkowe uprawnienia, możesz odczytywać dane po umieszczeniu aplikacji przez użytkownika lub system w tle. Zobacz pełny przykład odczytu w tle.
Typ danych Kroki w Health Connect rejestruje liczbę kroków wykonanych przez użytkownika pomiędzy odczytami. Liczba kroków to wspólny pomiar na platformach związanych ze zdrowiem, kondycją i wellbeingiem. Health Connect ułatwia odczytywanie i zapisywanie danych o liczbie kroków.
Aby odczytać rekordy, utwórz plik ReadRecordsRequest
i prześlij go podczas połączenia z readRecords
.
Z tego przykładu dowiesz się, jak odczytać dane o liczbie kroków użytkownika w określonym czasie. Pełny przykład z użyciem SensorManager
znajdziesz w przewodniku dotyczącym danych liczba kroków.
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
}
}
Przykład odczytywania w tle
Aby odczytywać dane w tle, w pliku manifestu zadeklaruj to uprawnienie:
<application>
<uses-permission android:name="android.permission.health.READ_HEALTH_DATA_IN_BACKGROUND" />
...
</application>
Ten przykład pokazuje, jak odczytać dane o liczbie kroków w tle w określonym czasie za pomocą funkcji 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
...
}
Odczytywanie wcześniej zapisanych danych
Jeśli aplikacja wcześniej zapisała w Health Connect jakieś rekordy, może je odczytać bez konieczności uzyskania uprawnień do odczytu tych konkretnych rekordów. Dotyczy to sytuacji, w których aplikacja musi ponownie zsynchronizować się z Health Connect po ponownym zainstalowaniu jej przez użytkownika.
Aby odczytać dane w tym scenariuszu, musisz wskazać nazwę pakietu jako obiekt DataOrigin
w parametrze dataOriginFilter
w ReadRecordsRequest
.
Ten przykład pokazuje, jak wskazać nazwę pakietu podczas odczytu rekordów Steps:
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
}
Ograniczenia odczytu
Domyślnie aplikacja może odczytywać dane z 30 dni, jeśli przyznano jej odpowiednie uprawnienia.
Dzięki uprawnieniu PERMISSION_READ_HEALTH_DATA_HISTORY
aplikacja może odczytywać dane starsze niż 30 dni.
30-dniowe ograniczenie
Aplikacje mogą odczytywać dane z Health Connect przez okres do 30 dni przed przyznaniem uprawnień.
Jeśli jednak użytkownik usunie Twoją aplikację, historia uprawnień zostanie utracona. Jeśli użytkownik ponownie zainstaluje aplikację i po raz kolejny przyzna jej uprawnienia, aplikacja będzie mogła odczytywać dane z Health Connect do 30 dni przed tą datą.
Przykład 30-dni
Jeśli użytkownik po raz pierwszy przyznał Twojej aplikacji uprawnienia do odczytu 30 marca 2023 r., najstarsze dane, które Twoja aplikacja może odczytać, pochodzą z 28 lutego 2023 r.
Użytkownik usuwa Twoją aplikację 10 maja 2023 r. Użytkownik decyduje się na ponowne zainstalowanie aplikacji 15 maja 2023 r. i przyznaje uprawnienia do odczytu. Najwcześniejsza data, z której aplikacja może odczytać dane, to 15 kwietnia 2023 r.
odczytywać dane starsze niż 30 dni;
Jeśli chcesz odczytać dane starsze niż 30 dni, musisz użyć uprawnienia PERMISSION_READ_HEALTH_DATA_HISTORY
. Bez tego uprawnienia próba odczytu pojedynczego rekordu starszego niż 30 dni spowoduje błąd.
Nie możesz też odczytać żadnych danych starszych niż 30 dni za pomocą żadnego z tych zapytań dotyczących zakresu czasowego.