Das folgende Beispiel zeigt, wie Sie Rohdaten im Rahmen des gängigen Workflows lesen.
Daten lesen
Mit Health Connect können Apps Daten aus dem Datenspeicher lesen, wenn die App im Vordergrund und im Hintergrund ausgeführt wird:
Lesen im Vordergrund: Normalerweise können Sie Daten aus Health Connect lesen, wenn sich Ihre App im Vordergrund befindet. In diesen Fällen können Sie einen Dienst im Vordergrund verwenden, um diesen Vorgang auszuführen, falls der Nutzer oder das System Ihre App während eines Lesevorgangs in den Hintergrund verschiebt.
Lesen im Hintergrund: Wenn Sie vom Nutzer eine zusätzliche Berechtigung anfordern, können Sie Daten lesen, nachdem der Nutzer oder das System Ihre App im Hintergrund gestartet hat. Vollständiges Beispiel für die Hintergrundlesefunktion
Der Datentyp „Schritte“ in Health Connect erfasst die Anzahl der Schritte, die ein Nutzer zwischen den Messungen zurückgelegt hat. Die Schrittzahl ist eine gängige Messeinheit auf Gesundheits-, Fitness- und Wellnessplattformen. Mit Health Connect können Daten zur Schrittzahl ganz einfach gelesen und geschrieben werden.
Wenn Sie Einträge lesen möchten, erstellen Sie eine ReadRecordsRequest
und geben Sie sie beim Aufrufen von readRecords
an.
Das folgende Beispiel zeigt, wie du die Schrittzahldaten für einen Nutzer innerhalb eines bestimmten Zeitraums abrufen kannst. Ein erweitertes Beispiel mit SensorManager
finden Sie im Datenleitfaden für die Schrittzahl.
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
}
}
Beispiel für die Hintergrundlesefunktion
Wenn Sie Daten im Hintergrund lesen möchten, müssen Sie in Ihrer Manifestdatei die folgende Berechtigung angeben:
<application>
<uses-permission android:name="android.permission.health.READ_HEALTH_DATA_IN_BACKGROUND" />
...
</application>
Im folgenden Beispiel wird gezeigt, wie Sie mit WorkManager
Daten zur Schrittzahl eines Nutzers innerhalb eines bestimmten Zeitraums im Hintergrund lesen:
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
...
}
Der Parameter ReadRecordsRequest
hat den Standardwert pageSize
1.000.
Wenn die Anzahl der Einträge in einer einzelnen readResponse
die pageSize
der Anfrage überschreitet, müssen Sie mit pageToken
alle Seiten der Antwort durchgehen, um alle Einträge abzurufen.
Achten Sie jedoch darauf, dass Sie nicht die Ratenbeschränkung überschreiten.
pageToken read example
Wir empfehlen, pageToken
zum Lesen von Einträgen zu verwenden, um alle verfügbaren Daten aus dem angeforderten Zeitraum abzurufen.
Im folgenden Beispiel wird gezeigt, wie alle Datensätze gelesen werden, bis alle Seitentokens aufgebraucht sind:
val type = HeartRateRecord::class
val endTime = Instant.now()
val startTime = endTime.minus(Duration.ofDays(7))
try {
var pageToken: String? = null
do {
val readResponse =
healthConnectClient.readRecords(
ReadRecordsRequest(
recordType = type,
timeRangeFilter = TimeRangeFilter.between(
startTime,
endTime
),
pageToken = pageToken
)
)
val records = readResponse.records
// Do something with records
pageToken = readResponse.pageToken
} while (pageToken != null)
} catch (quotaError: IllegalStateException) {
// Backoff
}
Informationen zu Best Practices beim Lesen großer Datensätze finden Sie unter Geschwindigkeitsbeschränkung vermeiden.
Zuvor geschriebene Daten lesen
Wenn eine App bereits Daten in Health Connect geschrieben hat, kann sie Verlaufsdaten lesen. Dies gilt für Szenarien, in denen die App nach der Neuinstallation des Nutzers mit Health Connect neu synchronisiert werden muss.
Es gelten einige Leseeinschränkungen:
Android 14 und höher
- Es gibt kein bisheriges Limit für Apps, die ihre eigenen Daten lesen.
- 30-tägiges Limit für Apps, die andere Daten lesen
Android 13 und niedriger
- 30-tägiges Limit für das Lesen von Daten durch Apps
Die Einschränkungen können aufgehoben werden, indem Sie eine Leseberechtigung anfordern.
Wenn Sie Verlaufsdaten lesen möchten, müssen Sie den Paketnamen als DataOrigin
-Objekt im Parameter dataOriginFilter
Ihrer ReadRecordsRequest
angeben.
Im folgenden Beispiel wird gezeigt, wie beim Lesen von Schritten ein Paketname angegeben wird:
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
}
Daten lesen, die älter als 30 Tage sind
Standardmäßig können alle Anwendungen Daten aus Health Connect bis zu 30 Tage vor der Erstgewährung einer Berechtigung lesen.
Wenn Sie die Leseberechtigungen über die Standardeinschränkungen hinaus erweitern möchten, beantragen Sie die PERMISSION_READ_HEALTH_DATA_HISTORY
.
Andernfalls führt ein Versuch, Einträge zu lesen, die älter als 30 Tage sind, ohne diese Berechtigung zu einem Fehler.
Berechtigungsverlauf für eine gelöschte App
Wenn ein Nutzer Ihre App löscht, werden alle Berechtigungen, einschließlich der Berechtigung für den Verlauf, widerrufen. Wenn der Nutzer Ihre App neu installiert und die Berechtigung noch einmal erteilt, gelten dieselben Standardeinschränkungen und Ihre App kann bis zu 30 Tage vor diesem neuen Datum Daten von Health Connect lesen.
Angenommen, der Nutzer löscht Ihre App am 10. Mai 2023, installiert sie am 15. Mai 2023 neu und gewährt Leseberechtigungen. Das früheste Datum, ab dem Ihre App jetzt standardmäßig Daten lesen kann, ist der 15. April 2023.