Ce guide est compatible avec la version 1.1.0-alpha12 de Santé Connect.
Santé Connect fournit un type de données température cutanée pour mesurer la température corporelle périphérique. Cette mesure est un signal particulièrement utile pour détecter la qualité du sommeil, la santé reproductive et l'apparition potentielle d'une maladie.
Disponibilité de la fonctionnalité
Pour déterminer si l'appareil d'un utilisateur prend en charge la température cutanée dans Santé Connect, vérifiez la disponibilité deFEATURE_SKIN_TEMPERATURE
sur le client :
if (healthConnectClient
.features
.getFeatureStatus(
HealthConnectFeatures.FEATURE_SKIN_TEMPERATURE
) == HealthConnectFeatures.FEATURE_STATUS_AVAILABLE) {
// Feature is available
} else {
// Feature isn't available
}
Pour en savoir plus, consultez Vérifier la disponibilité des fonctionnalités.
Autorisations requises
L'accès à la température cutanée est protégé par les autorisations suivantes :
android.permission.health.READ_SKIN_TEMPERATURE
android.permission.health.WRITE_SKIN_TEMPERATURE
Pour ajouter la fonctionnalité de température cutanée à votre application, commencez par demander des autorisations d'écriture pour le type de données SkinTemperature
.
Voici l'autorisation que vous devez déclarer pour pouvoir écrire la température de la peau :
<application>
<uses-permission
android:name="android.permission.health.WRITE_SKIN_TEMPERATURE" />
...
</application>
Pour lire la température cutanée, vous devez demander les autorisations suivantes :
<application>
<uses-permission
android:name="android.permission.health.READ_SKIN_TEMPERATURE" />
...
</application>
Demander des autorisations à l'utilisateur
Après avoir créé une instance de client, votre application doit demander des autorisations à l'utilisateur. Les utilisateurs doivent être autorisés à accorder ou à refuser des autorisations à tout moment.
Pour ce faire, créez un ensemble d'autorisations pour les types de données requis. Assurez-vous d'abord que les autorisations de l'ensemble sont déclarées dans votre fichier manifeste Android.
// Create a set of permissions for required data types
val PERMISSIONS =
setOf(
HealthPermission.getReadPermission(SkinTemperatureRecord::class),
HealthPermission.getWritePermission(SkinTemperatureRecord::class)
)
Utilisez getGrantedPermissions
pour voir si votre application dispose déjà des autorisations requises accordées. Si ce n'est pas le cas, utilisez createRequestPermissionResultContract
pour demander ces autorisations. L'écran des autorisations de Santé Connect s'affiche.
// Create the permissions launcher
val requestPermissionActivityContract = PermissionController.createRequestPermissionResultContract()
val requestPermissions = registerForActivityResult(requestPermissionActivityContract) { granted ->
if (granted.containsAll(PERMISSIONS)) {
// Permissions successfully granted
} else {
// Lack of required permissions
}
}
suspend fun checkPermissionsAndRun(healthConnectClient: HealthConnectClient) {
val granted = healthConnectClient.permissionController.getGrantedPermissions()
if (granted.containsAll(PERMISSIONS)) {
// Permissions already granted; proceed with inserting or reading data
} else {
requestPermissions.launch(PERMISSIONS)
}
}
Étant donné que les utilisateurs peuvent accorder ou révoquer des autorisations à tout moment, votre application doit vérifier régulièrement les autorisations accordées et être capable de gérer les cas de perte d'autorisations.
Informations incluses dans un enregistrement de température cutanée
Les mesures de la température cutanée sont organisées en enregistrements. Chaque enregistrement se compose des informations suivantes :
- Température de référence, en degrés Celsius ou Fahrenheit. Il s'agit d'une valeur facultative qui est particulièrement utile pour la visualisation dans l'interface utilisateur de votre application.
- Une liste des deltas de température cutanée, chacun indiquant la variation de la température cutanée depuis la dernière mesure. Si la température de référence est fournie, ces deltas doivent utiliser les mêmes unités de température.
- Emplacement sur le corps de l'utilisateur où la mesure a été prise : doigt, orteil ou poignet.
Agrégations acceptées
Aucune agrégation n'est acceptée pour ce type de données.
Exemples d'utilisation
Lire ou écrire des mesures de température cutanée à l'aide de la bibliothèque Jetpack.
Lire la température cutanée
L'extrait de code suivant montre comment lire les mesures de température cutanée à l'aide de la bibliothèque Jetpack :
suspend fun readSkinTemperatures() {
// Error handling, permission check, and feature availability check
// aren't included.
// Record includes measurements during the past hour.
val recordEndTime = Instant.now()
val recordStartTime = recordEndTime.minusSeconds(60 * 60)
val response = healthConnectClient.readRecords(
ReadRecordsRequest<SkinTemperatureRecord>(
timeRangeFilter = TimeRangeFilter.between(
recordStartTime, recordEndTime
)
)
)
for (skinTemperatureRecord in response.records) {
// Process each skin temperature record here.
}
}
Indiquer la température cutanée
L'extrait de code suivant montre comment écrire des mesures de température cutanée à l'aide de la bibliothèque Jetpack :
suspend fun writeSkinTemperatures(): InsertRecordsResponse {
// Error handling, permission check, and feature availability check
// aren't included.
// Record includes measurements during the past hour.
val recordEndTime: ZonedDateTime = now()
val recordStartTime: ZonedDateTime = recordEndTime.minusHours(1)
healthConnectClient.insertRecords(
// For this example, there's only one skin temperature record.
listOf(
SkinTemperatureRecord(
baseline = Temperature.celsius(37.0),
startTime = recordStartTime.toInstant(),
startZoneOffset = recordStartTime.offset,
endTime = recordEndTime.toInstant(),
endZoneOffset = recordEndTime.offset,
deltas = listOf(
SkinTemperatureRecord.Delta(
recordEndTime.minusMinutes(50).toInstant(), celsius(0.5)
), SkinTemperatureRecord.Delta(
recordEndTime.minusMinutes(30).toInstant(), celsius(-0.7)
)
),
measurementLocation = SkinTemperatureRecord.MEASUREMENT_LOCATION_FINGER,
metadata = Metadata.autoRecorded(
device = Device(type = Device.TYPE_RING)
),
)
)
)
}