L'exemple suivant vous montre comment lire des données brutes dans le cadre du workflow commun.
Lire des données
Santé Connect permet aux applications de lire les données du datastore lorsqu'elles sont au premier plan et en arrière-plan:
Lecture au premier plan: vous pouvez normalement lire les données de Santé Connect lorsque votre application est au premier plan. Dans ce cas, vous pouvez envisager d'utiliser un service de premier plan pour exécuter cette opération au cas où l'utilisateur ou le système placerait votre application en arrière-plan lors d'une opération de lecture.
Lectures en arrière-plan: en demandant une autorisation supplémentaire à l'utilisateur, vous pouvez lire les données une fois que l'utilisateur ou le système a placé votre application en arrière-plan. Consultez l'exemple de lecture en arrière-plan complet.
Le type de données Pas dans Santé Connect enregistre le nombre de pas qu'un utilisateur a effectués entre deux lectures. Le nombre de pas est une unité de mesure courante pour les plates-formes de santé, de remise en forme et de bien-être. Santé Connect facilite la lecture et l'écriture des données sur le nombre de pas.
Pour lire des enregistrements, créez une ReadRecordsRequest
et fournissez-la lorsque vous appelez readRecords
.
L'exemple suivant montre comment lire le nombre de pas d'un utilisateur au cours d'une certaine période. Pour obtenir un exemple détaillé avec SensorManager
, consultez le guide des données sur le nombre de pas.
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
}
}
Exemple de lecture en arrière-plan
Pour lire des données en arrière-plan, déclarez l'autorisation suivante dans votre fichier manifeste:
<application>
<uses-permission android:name="android.permission.health.READ_HEALTH_DATA_IN_BACKGROUND" />
...
</application>
L'exemple suivant montre comment lire les données sur le nombre de pas en arrière-plan pour un utilisateur au cours d'une certaine période à l'aide de 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
...
}
Lire les données déjà écrites
Si une application a déjà écrit des enregistrements sur Santé Connect, elle peut lire ces enregistrements spécifiques sans avoir besoin d'une autorisation en lecture. Cela s'applique aux scénarios dans lesquels l'application doit se resynchroniser avec Santé Connect après que l'utilisateur l'a réinstallée.
Pour lire les données dans ce scénario, vous devez indiquer le nom du package en tant qu'objet DataOrigin
dans le paramètre dataOriginFilter
de votre ReadRecordsRequest
.
L'exemple suivant montre comment indiquer un nom de package lors de la lecture des enregistrements du nombre de pas :
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
}
Restrictions de lecture
Par défaut, votre application peut lire les données remontant jusqu'à 30 jours avec toutes les autorisations accordées.
Avec l'autorisation PERMISSION_READ_HEALTH_DATA_HISTORY
, votre application peut lire les données datant de plus de 30 jours.
Restriction de 30 jours
Les applications peuvent lire les données de Santé Connect remontant jusqu'à 30 jours avant la date d'octroi de la première autorisation.
Toutefois, si un utilisateur supprime votre application, l'historique des autorisations sera perdu. Si l'utilisateur réinstalle votre application et accorde de nouveau l'autorisation, elle pourra lire les données de Santé Connect remontant jusqu'à 30 jours avant cette nouvelle date.
Exemple sur 30 jours
Si un utilisateur a d'abord accordé une autorisation de lecture à votre application le 30 mars 2023, les premières données que votre application pourra lire remonteront au 28 février 2023.
Ce même utilisateur supprime ensuite votre application le 10 mai 2023. L'utilisateur décide de la réinstaller le 15 mai 2023 et d'accorder une autorisation de lecture. Votre application pourra donc lire les données remontant au 15 avril 2023.
Lire les données de plus de 30 jours
Si vous souhaitez lire des données datant de plus de 30 jours, vous devez utiliser l'autorisation PERMISSION_READ_HEALTH_DATA_HISTORY
. Sans cette autorisation, une tentative de lecture d'un seul enregistrement datant de plus de 30 jours génère une erreur.
Vous ne pouvez pas non plus lire de données datant de plus de 30 jours à l'aide de l'une des requêtes de plage de dates.