Rohdaten lesen

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

Mit dem Datentyp „Schritte“ in Health Connect wird die Anzahl der Schritte erfasst, die ein Nutzer zwischen den Messungen zurückgelegt hat. Die Schrittzahl ist eine gängige Messgröße 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 Hintergrundlesevorgänge

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
  ...
}

Zuvor geschriebene Daten lesen

Wenn eine App bereits Datensätze in Health Connect geschrieben hat, kann sie diese zurücklesen, ohne dass eine Leseberechtigung für diese Datensätze erforderlich ist. Dies gilt für Szenarien, in denen die App nach der Neuinstallation des Nutzers mit Health Connect synchronisiert werden muss.

Wenn Sie in diesem Szenario Daten lesen möchten, müssen Sie den Paketnamen als DataOrigin-Objekt im dataOriginFilter-Parameter Ihrer ReadRecordsRequest angeben.

Das folgende Beispiel zeigt, wie beim Lesen von Schrittdatensätzen 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
}

Leseeinschränkungen

Standardmäßig kann Ihre App mit allen erteilten Berechtigungen Daten bis zu 30 Tage lang lesen. Mit der Berechtigung PERMISSION_READ_HEALTH_DATA_HISTORY kann deine App Daten lesen, die älter als 30 Tage sind.

30-tägige Einschränkung

Health Connect kann Daten bis zu 30 Tage vor der Erstgewährung einer Berechtigung lesen.

Wenn ein Nutzer Ihre App jedoch löscht, geht der Berechtigungsverlauf verloren. Wenn der Nutzer Ihre App neu installiert und die Berechtigung noch einmal erteilt, kann Ihre App bis zu 30 Tage vor diesem neuen Datum Daten aus Health Connect lesen.

Beispiel für 30 Tage

Wenn ein Nutzer Ihrer App am 30. März 2023 die Leseberechtigung erteilt hat, können die frühesten Daten, die Ihre App abrufen kann, ab dem 28. Februar 2023 stammen.

Der Nutzer löscht Ihre App dann am 10. Mai 2023. Der Nutzer beschließt, es am 15. Mai 2023 neu zu installieren und die Leseberechtigung zu erteilen. Das früheste Datum, ab dem Ihre App Daten lesen kann, ist der 15. April 2023.

Daten lesen, die älter als 30 Tage sind

Wenn Sie Daten lesen möchten, die älter als 30 Tage sind, müssen Sie die Berechtigung PERMISSION_READ_HEALTH_DATA_HISTORY verwenden. Ohne diese Berechtigung führt ein Versuch, einen einzelnen Datensatz zu lesen, der älter als 30 Tage ist, zu einem Fehler. Mit einer der Zeitraumanfragen können Sie außerdem keine Daten lesen, die älter als 30 Tage sind.