元データを読み取る

次の例は、一般的なワークフローの一環として元データを読み取る方法を示しています。

シンプルな読み取り

ヘルスコネクトのデータの種類「歩数」では、各読み取りの間にユーザーが歩いた歩数が記録されます。歩数は、健康、フィットネス、ウェルネスのプラットフォームで共通の測定値を表します。ヘルスコネクトでは、歩数データの読み取りと書き込みが簡単にできます。

レコードを読み取るには、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
    }
}

以前に書き込まれたデータを読み取る

アプリが以前にヘルスコネクトにレコードを書き込んでいた場合は、そのレコードに対する読み取り権限がなくても、そのレコードをアプリで読み戻すことができます。これは、ユーザーによるインストール後にヘルスコネクトと再同期する必要があるシナリオに該当します。

このシナリオでデータを読み取るには、ReadRecordsRequestdataOriginFilter パラメータで、パッケージ名を DataOrigin オブジェクトとして指定する必要があります。

次の例は、歩数レコードを読み取るときにパッケージ名を指定する方法を示しています。

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 日間の読み取り制限

ヘルスコネクトでは、最初に権限が付与されたときから最大 30 日間遡ってデータを読み取れます。

ただし、ユーザーがアプリを削除すると、権限履歴は失われます。ユーザーがアプリを再インストールして権限を再度付与すると、その新しい日付から最大 30 日間遡って、アプリがヘルスコネクトからデータを読み取れます。

ユーザーが 2023 年 3 月 30 日に初めてアプリに読み取り権限を許可した場合、アプリは 2023 年 2 月 28 日以降のデータを読み取れます。

その後、ユーザーは 2023 年 5 月 10 日にアプリを削除しました。ユーザーは 2023 年 5 月 15 日にアプリを再インストールし、読み取り権限を許可しました。この場合、アプリは 2023 年 4 月 15 日以降のデータを読み取れます。

フォアグラウンド制限

ヘルスコネクトでのデータの読み取りは、フォアグラウンドで実行されているアプリに制限されています。この制限は、ユーザーのプライバシー保護を強化するために設けられたものです。 ヘルスコネクトにはデータのバックグラウンドでの読み取りアクセス権がなく、データの読み取りとアクセスはフォアグラウンドでのみ行えることがユーザーに保証されます。

アプリで読み取り値を表示する場合など、中断を許容できる状況では、ヘルスコネクトからクライアント アプリに対して直接読み取りを行います。

ヘルスコネクトから一定範囲のデータを読み取り、別の場所に書き込みやアップロードを行う場合など、中断せずにアプリを実行したい場合は、簡単に破棄できる Activity ではなく ForegroundService を使用します。