HealthConnectManager
open class HealthConnectManager
kotlin.Any | |
↳ | android.health.connect.HealthConnectManager |
This class provides APIs to interact with the centralized HealthConnect storage maintained by the system.
HealthConnect is an offline, on-device storage that unifies data from multiple devices and apps into an ecosystem featuring.
- APIs to insert data of various types into the system.
The basic unit of data in HealthConnect is represented as a Record
object, which is the base class for all the other data types such as .
Summary
Constants | |
---|---|
static String |
Activity action: Launch UI to manage (e.g. grant/revoke) health permissions. |
static String |
Activity action: Launch UI to share the route associated with an exercise session. |
static String |
Used in conjunction with |
static String |
An exercise route requested via |
static String |
A string ID of a session to be used with |
Constants
ACTION_MANAGE_HEALTH_PERMISSIONS
static val ACTION_MANAGE_HEALTH_PERMISSIONS: String
Activity action: Launch UI to manage (e.g. grant/revoke) health permissions.
Shows a list of apps which request at least one permission of the Health permission group.
Input: android.content.Intent#EXTRA_PACKAGE_NAME
string extra with the name of the app requesting the action. Optional: Adding package name extras launches a UI to manager (e.g. grant/revoke) for this app.
Value: "android.health.connect.action.MANAGE_HEALTH_PERMISSIONS"
ACTION_REQUEST_EXERCISE_ROUTE
static val ACTION_REQUEST_EXERCISE_ROUTE: String
Activity action: Launch UI to share the route associated with an exercise session.
Input: caller must provide `String` extra EXTRA_SESSION_ID
Result will be delivered via [Activity.onActivityResult] with `ExerciseRoute` EXTRA_EXERCISE_ROUTE.
Value: "android.health.connect.action.REQUEST_EXERCISE_ROUTE"
CATEGORY_HEALTH_PERMISSIONS
static val CATEGORY_HEALTH_PERMISSIONS: String
Used in conjunction with android.content.Intent#ACTION_VIEW_PERMISSION_USAGE
to launch UI to show an app’s health permission rationale/data policy.
Note: Used by apps to define an intent filter in conjunction with android.content.Intent#ACTION_VIEW_PERMISSION_USAGE
that the HC UI can link out to.
Value: "android.intent.category.HEALTH_PERMISSIONS"
EXTRA_EXERCISE_ROUTE
static val EXTRA_EXERCISE_ROUTE: String
An exercise route requested via ACTION_REQUEST_EXERCISE_ROUTE
.
This is returned for a successful request to access a route associated with an exercise session.
Value: "android.health.connect.extra.EXERCISE_ROUTE"
EXTRA_SESSION_ID
static val EXTRA_SESSION_ID: String
A string ID of a session to be used with ACTION_REQUEST_EXERCISE_ROUTE
.
This is used to specify route of which exercise session we want to request.
Value: "android.health.connect.extra.SESSION_ID"
Public methods
aggregate
open fun <T : Any!> aggregate(
request: AggregateRecordsRequest<T>,
executor: Executor,
callback: OutcomeReceiver<AggregateRecordsResponse<T>!, HealthConnectException!>
): Unit
Get aggregations corresponding to request
.
Parameters | |
---|---|
<T> |
Result type of the aggregation.
Note: This type is embedded in the Only |
request |
AggregateRecordsRequest<T>: request for different aggregation. This value cannot be null . |
executor |
Executor: Executor on which to invoke the callback. This value cannot be null . Callback and listener events are dispatched through this Executor , providing an easy way to control which thread is used. To dispatch events through the main thread of your application, you can use Context.getMainExecutor() . Otherwise, provide an Executor that dispatches to an appropriate thread. |
callback |
OutcomeReceiver<AggregateRecordsResponse<T>!, HealthConnectException!>: Callback to receive result of performing this operation. This value cannot be null . |
Return | |
---|---|
Unit |
This value cannot be null . |
aggregateGroupByDuration
open fun <T : Any!> aggregateGroupByDuration(
request: AggregateRecordsRequest<T>,
duration: Duration,
executor: Executor,
callback: OutcomeReceiver<MutableList<AggregateRecordsGroupedByDurationResponse<T>!>!, HealthConnectException!>
): Unit
Get aggregations corresponding to request
. Use this API if results are to be grouped by concrete intervals of time, for example 5 Hrs, 10 Hrs etc.
Parameters | |
---|---|
<T> |
Result type of the aggregation.
Note: This type is embedded in the Only |
request |
AggregateRecordsRequest<T>: request for different aggregation. This value cannot be null . |
duration |
Duration: Duration on which to group by results This value cannot be null . |
executor |
Executor: Executor on which to invoke the callback. This value cannot be null . Callback and listener events are dispatched through this Executor , providing an easy way to control which thread is used. To dispatch events through the main thread of your application, you can use Context.getMainExecutor() . Otherwise, provide an Executor that dispatches to an appropriate thread. |
callback |
OutcomeReceiver<MutableList<AggregateRecordsGroupedByDurationResponse<T>!>!, HealthConnectException!>: Callback to receive result of performing this operation. This value cannot be null . |
aggregateGroupByPeriod
open fun <T : Any!> aggregateGroupByPeriod(
request: AggregateRecordsRequest<T>,
period: Period,
executor: Executor,
callback: OutcomeReceiver<MutableList<AggregateRecordsGroupedByPeriodResponse<T>!>!, HealthConnectException!>
): Unit
Get aggregations corresponding to request
. Use this API if results are to be grouped by number of days. This API handles changes in ZoneOffset
when computing the data on a per-day basis.
Parameters | |
---|---|
<T> |
Result type of the aggregation.
Note: This type is embedded in the Only |
request |
AggregateRecordsRequest<T>: Request for different aggregation. This value cannot be null . |
period |
Period: Period on which to group by results This value cannot be null . |
executor |
Executor: Executor on which to invoke the callback. This value cannot be null . Callback and listener events are dispatched through this Executor , providing an easy way to control which thread is used. To dispatch events through the main thread of your application, you can use Context.getMainExecutor() . Otherwise, provide an Executor that dispatches to an appropriate thread. |
callback |
OutcomeReceiver<MutableList<AggregateRecordsGroupedByPeriodResponse<T>!>!, HealthConnectException!>: Callback to receive result of performing this operation. This value cannot be null . |
deleteRecords
open fun deleteRecords(
recordIds: MutableList<RecordIdFilter!>,
executor: Executor,
callback: OutcomeReceiver<Void!, HealthConnectException!>
): Unit
Deletes records based on RecordIdFilter
.
Deletions are performed in a transaction i.e. either all will be deleted or none
Parameters | |
---|---|
recordIds |
MutableList<RecordIdFilter!>: recordIds on which to perform delete operation. This value cannot be null . |
executor |
Executor: Executor on which to invoke the callback. This value cannot be null . |
callback |
OutcomeReceiver<Void!, HealthConnectException!>: Callback to receive result of performing this operation. This value cannot be null . |
Exceptions | |
---|---|
java.lang.IllegalArgumentException |
if recordIds is empty |
deleteRecords
open fun deleteRecords(
recordType: Class<out Record!>,
timeRangeFilter: TimeRangeFilter,
executor: Executor,
callback: OutcomeReceiver<Void!, HealthConnectException!>
): Unit
Deletes records based on the TimeRangeFilter
.
Deletions are performed in a transaction i.e. either all will be deleted or none
Parameters | |
---|---|
recordType |
Class<out Record!>: recordType to perform delete operation on. This value cannot be null . |
timeRangeFilter |
TimeRangeFilter: time filter based on which to delete the records. This value cannot be null . |
executor |
Executor: Executor on which to invoke the callback. This value cannot be null . |
callback |
OutcomeReceiver<Void!, HealthConnectException!>: Callback to receive result of performing this operation. This value cannot be null . |
getChangeLogToken
open fun getChangeLogToken(
request: ChangeLogTokenRequest,
executor: Executor,
callback: OutcomeReceiver<ChangeLogTokenResponse!, HealthConnectException!>
): Unit
Get token for {HealthConnectManager#getChangeLogs}. Changelogs requested corresponding to this token will be post the time this token was generated by the system all items that match the given filters.
Tokens from this request are to be passed to {HealthConnectManager#getChangeLogs}
Parameters | |
---|---|
request |
ChangeLogTokenRequest: A request to get changelog token This value cannot be null . |
executor |
Executor: Executor on which to invoke the callback. This value cannot be null . |
callback |
OutcomeReceiver<ChangeLogTokenResponse!, HealthConnectException!>: Callback to receive result of performing this operation. This value cannot be null . |
getChangeLogs
open fun getChangeLogs(
changeLogsRequest: ChangeLogsRequest,
executor: Executor,
callback: OutcomeReceiver<ChangeLogsResponse!, HealthConnectException!>
): Unit
Get change logs post the time when token
was generated.
Parameters | |
---|---|
changeLogsRequest |
ChangeLogsRequest: The token from HealthConnectManager#getChangeLogToken . This value cannot be null . |
executor |
Executor: Executor on which to invoke the callback. This value cannot be null . Callback and listener events are dispatched through this Executor , providing an easy way to control which thread is used. To dispatch events through the main thread of your application, you can use Context.getMainExecutor() . Otherwise, provide an Executor that dispatches to an appropriate thread. |
callback |
OutcomeReceiver<ChangeLogsResponse!, HealthConnectException!>: Callback to receive result of performing this operation. This value cannot be null . |
insertRecords
open fun insertRecords(
records: MutableList<Record!>,
executor: Executor,
callback: OutcomeReceiver<InsertRecordsResponse!, HealthConnectException!>
): Unit
Inserts records
into the HealthConnect database. The records returned in InsertRecordsResponse
contains the unique IDs of the input records. The values are in same order as records
. In case of an error or a permission failure the HealthConnect service, OutcomeReceiver#onError
will be invoked with a HealthConnectException
.
Parameters | |
---|---|
records |
MutableList<Record!>: list of records to be inserted. This value cannot be null . |
executor |
Executor: Executor on which to invoke the callback. This value cannot be null . Callback and listener events are dispatched through this Executor , providing an easy way to control which thread is used. To dispatch events through the main thread of your application, you can use Context.getMainExecutor() . Otherwise, provide an Executor that dispatches to an appropriate thread. |
callback |
OutcomeReceiver<InsertRecordsResponse!, HealthConnectException!>: Callback to receive result of performing this operation. This value cannot be null . |
Exceptions | |
---|---|
java.lang.RuntimeException |
for internal errors |
readRecords
open fun <T : Record!> readRecords(
request: ReadRecordsRequest<T>,
executor: Executor,
callback: OutcomeReceiver<ReadRecordsResponse<T>!, HealthConnectException!>
): Unit
API to read records based on ReadRecordsRequestUsingFilters
or ReadRecordsRequestUsingIds
Number of records returned by this API will depend based on below factors:
When an app with read permission allowed calls the API from background then it will be able to read only its own inserted records and will not get records inserted by other apps. This may be less than the total records present for the record type.
When an app with read permission allowed calls the API from foreground then it will be able to read all records for the record type.
App with only write permission but no read permission allowed will be able to read only its own inserted records both when in foreground or background.
An app without both read and write permissions will not be able to read any record and the API will throw Security Exception.
Parameters | |
---|---|
request |
ReadRecordsRequest<T>: Read request based on ReadRecordsRequestUsingFilters or ReadRecordsRequestUsingIds This value cannot be null . |
executor |
Executor: Executor on which to invoke the callback. This value cannot be null . |
callback |
OutcomeReceiver<ReadRecordsResponse<T>!, HealthConnectException!>: Callback to receive result of performing this operation. This value cannot be null . |
Exceptions | |
---|---|
java.lang.IllegalArgumentException |
if request page size set is more than 5000 in ReadRecordsRequestUsingFilters |
java.lang.SecurityException |
if app without read or write permission tries to read. |
updateRecords
open fun updateRecords(
records: MutableList<Record!>,
executor: Executor,
callback: OutcomeReceiver<Void!, HealthConnectException!>
): Unit
Updates records
into the HealthConnect database. In case of an error or a permission failure the HealthConnect service, OutcomeReceiver#onError
will be invoked with a HealthConnectException
.
In case the input record to be updated does not exist in the database or the caller is not the owner of the record then HealthConnectException#ERROR_INVALID_ARGUMENT
will be thrown.
Parameters | |
---|---|
records |
MutableList<Record!>: list of records to be updated. This value cannot be null . |
executor |
Executor: Executor on which to invoke the callback. This value cannot be null . Callback and listener events are dispatched through this Executor , providing an easy way to control which thread is used. To dispatch events through the main thread of your application, you can use Context.getMainExecutor() . Otherwise, provide an Executor that dispatches to an appropriate thread. |
callback |
OutcomeReceiver<Void!, HealthConnectException!>: Callback to receive result of performing this operation. This value cannot be null . |
Exceptions | |
---|---|
java.lang.IllegalArgumentException |
if at least one of the records is missing both ClientRecordID and UUID. |