Questa guida è compatibile con la versione 1.1.0-alpha12 di Connessione Salute.
Connessione Salute fornisce un tipo di dato temperatura cutanea per misurare la temperatura corporea periferica. Questa misurazione è un indicatore particolarmente utile per rilevare la qualità del sonno, la salute riproduttiva e la potenziale insorgenza di malattie.
Autorizzazioni richieste
Come per qualsiasi tipo di dato in Connessione Salute, l'accesso alla temperatura cutanea è protetto da una coppia di autorizzazioni: READ_SKIN_TEMPERATURE
e WRITE_SKIN_TEMPERATURE
.
Richiedi le autorizzazioni all'utente
Dopo aver creato un'istanza client, l'app deve richiedere all'utente le autorizzazioni. Gli utenti devono poter concedere o negare le autorizzazioni in qualsiasi momento.
A tale scopo, crea un insieme di autorizzazioni per i tipi di dati richiesti. Assicurati innanzitutto che le autorizzazioni nel set siano dichiarate nel file manifest di Android.
// Create a set of permissions for required data types
val PERMISSIONS =
setOf(
HealthPermission.getReadPermission(SkinTemperatureRecord::class),
HealthPermission.getWritePermission(SkinTemperatureRecord::class)
)
Utilizza getGrantedPermissions
per verificare se alla tua app sono già state concesse le autorizzazioni richieste. In caso contrario, usa
createRequestPermissionResultContract
per richiedere
quelle autorizzazioni. Viene visualizzata la schermata delle autorizzazioni di Connessione Salute.
// 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)
}
}
Poiché gli utenti possono concedere o revocare le autorizzazioni in qualsiasi momento, la tua app deve controllare periodicamente le autorizzazioni concesse e gestire gli scenari in cui l'autorizzazione viene persa.
Informazioni incluse in un record della temperatura cutanea
Le misurazioni della temperatura cutanea sono organizzate in record. Ogni record è costituito dalle seguenti informazioni:
- Temperatura di riferimento in gradi Celsius o Fahrenheit. Si tratta di un valore facoltativo più utile per la visualizzazione nell'interfaccia utente dell'app.
- Un elenco di delta della temperatura cutanea, ciascuno che mostra la variazione della temperatura cutanea dall'ultima misurazione. Se viene fornita la temperatura di riferimento, questi delta devono utilizzare le stesse unità di misura della temperatura.
- La posizione sul corpo dell'utente in cui è stata eseguita la misurazione: dito, piolo o polso.
Aggregazioni supportate
Connessione Salute ti consente di ottenere i seguenti valori aggregati per un determinato elenco di delta:
- Valore minimo
- Valore massimo
- Valore medio
Leggere la temperatura cutanea
Il seguente snippet di codice mostra come leggere le misurazioni della temperatura cutanea utilizzando la libreria 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.
}
}
Scrivere la temperatura cutanea
Lo snippet di codice seguente mostra come scrivere le misurazioni della temperatura cutanea utilizzando la libreria 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)
),
)
)
)
}